如何调整图像亮度在Android中使用OpenCV的? [英] How to adjust image brightness in Android with OpenCV?

查看:1948
本文介绍了如何调整图像亮度在Android中使用OpenCV的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了亮度调节Android的一个例子形象。我用位图来调节亮度,但它需要一个很长的时间来运行。相反,我想用的OpenCV设置图像亮度的Andr​​oid。

I created an example image with brightness adjusted in Android. I used Bitmap to adjust the brightness but it takes a very long time to run. Instead, I want to set the image brightness in Android using OpenCV.

这是我的例子code,但它只会改变图像的颜色:

This is my example code, but it only changes the colour of the image:

Bitmap bmp = BitmapFactory.decodeResource(getResources(),
            R.drawable.a001);
int width = bmp.getWidth();
int height = bmp.getHeight();
Mat mRgba = new Mat(width, height, CvType.CV_8UC1);
Utils.bitmapToMat(bmp, mRgba);
Mat mRay = new Mat();
Imgproc.cvtColor(mRgba, mRay, Imgproc.COLOR_BGRA2RGB, 4);
Utils.matToBitmap(mRay, bmp);
mImageview_01.setImageBitmap(bmp);

[更新]
我尝试添加code,但错误

[Update] I try add code, but it error

Bitmap bmp = BitmapFactory.decodeResource(getResources(),
            R.drawable.a001);
int width = bmp.getWidth();
int height = bmp.getHeight();
Mat mRgba = new Mat(width, height, CvType.CV_8UC1);
Utils.bitmapToMat(bmp, mRgba);
Mat mRay = new Mat();
Imgproc.cvtColor(mRgba, mRay, Imgproc.COLOR_BGRA2RGB, 4);
/*
* Use Adaptive Thresholding on the grayscaled Mats crop -> threshed Mat
* src, Mat dst, double maxValue, int adaptiveMethod, int thresholdType,
* int blockSize, double C
*/
Imgproc.adaptiveThreshold(threshed, threshed, 255,
            Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY_INV, 15, 8);
Utils.matToBitmap(mRay, bmp);
mImageview_01.setImageBitmap(bmp);

[错误]

CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/imgproc/src/thresh.cpp:796: error: (-215) src.type() == CV_8UC1 in function void cv::adaptiveThreshold(cv::InputArray, cv::OutputArray, double, int, int, int, double)

什么,我想在这里做

请查看示例

推荐答案

在检查图像的增加/减少亮度给出的例子

check the example given at Increase/Decrease Brightness of Image

请参见本

    int brightness;
 SeekBar seekBarBrightness=(SeekBar)findViewById(R.id.seekBar1);
 seekBarBrightness.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

     @Override
     public void onStopTrackingTouch(SeekBar arg0) {


     }

     @Override
     public void onStartTrackingTouch(SeekBar arg0) {


     }

     @Override
     public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {

       Bitmap newBitMap  =   doBrightness(bitMap,progress);

       imageView.setImageBitmap(newBitMap);

     }
    });




    public static Bitmap doBrightness(Bitmap src, int value)
    {
        // image size
        int width = src.getWidth();
        int height = src.getHeight();
        // create output bitmap
        Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
        // color information
        int A, R, G, B;
        int pixel;

        // scan through all pixels
        for (int x = 0; x < width; ++x)
            {
                for (int y = 0; y < height; ++y)
                    {
                        // get pixel color
                        pixel = src.getPixel(x, y);
                        A = Color.alpha(pixel);
                        R = Color.red(pixel);
                        G = Color.green(pixel);
                        B = Color.blue(pixel);

                        // increase/decrease each channel
                        R += value;
                        if (R > 255)
                            {
                                R = 255;
                            } else if (R < 0)
                            {
                                R = 0;
                            }

                        G += value;
                        if (G > 255)
                            {
                                G = 255;
                            } else if (G < 0)
                            {
                                G = 0;
                            }

                        B += value;
                        if (B > 255)
                            {
                                B = 255;
                            } else if (B < 0)
                            {
                                B = 0;
                            }

                        // apply new pixel color to output bitmap
                        bmOut.setPixel(x, y, Color.argb(A, R, G, B));
                    }
            }

        // return final image
        return bmOut;
    }

这篇关于如何调整图像亮度在Android中使用OpenCV的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆