使用OpenCV进行图像处理-改变图像的亮度与对比度

通过OpenCV,制作一个有关图像处理的在Linux下的软件。

制作可以自动处理图像亮度的简单软件。

算法思想就是给每个像素加上一个固定的值来改变亮度。但是对于不同的图片效果就不是很好,最好是把代码中两行解注释利用手动调节的方法来完成。

开发环境:CodeBlocks

#include 
#include 
#include 
#include
#include
using namespace cv;
using namespace std;

static void ContrastAndBright(int, void*);
int g_BrightValue = 37;
Mat g_srcImage, g_dstImage;
int main(int argc, char *argv[])
{
    string filename;
    cout << "Please input file name:";
    cin >> filename;
    cout <<"Enter 'q' to finish the handle." << endl;

    g_srcImage = imread(filename);
    g_dstImage = Mat::zeros(g_srcImage.size(), g_srcImage.type());

    namedWindow("【效果图窗口】");
  //  createTrackbar("对比度:", "【效果图窗口】", &g_ContrastValue, 300, ContrastAndBright);
   // createTrackbar("亮   度:", "【效果图窗口】", &g_BrightValue, 200, ContrastAndBright);


    ContrastAndBright(g_BrightValue, 0);
    while(char(waitKey(1)) != 'q') {}

    cout << "Please input finished file name:";
    cin >> filename;
    imwrite(filename, g_dstImage);
    return 0;
}

static void ContrastAndBright(int, void*)
{
    namedWindow("【原始图窗口】");

    for(int y = 0; y < g_srcImage.rows; ++y)
        for(int x = 0; x < g_srcImage.cols; ++x)
            for(int c = 0; c < 3; ++c)
                g_dstImage.at(y,x)[c] = saturate_cast(
                        g_srcImage.at(y,x)[c] + g_BrightValue);

    imshow("【原始图窗口】", g_srcImage);
    imshow("【效果图窗口】", g_dstImage);
}

程序首先定义了一个两张mat,分别表示原始图与效果图,然后定义了原始图窗口。然后读取原始图片的名字。然后调用了改变图片亮度的函数,在函数中,首先输出原始图窗口,然后提取原始图的每一个像素,对于每个像素做出对应的亮度处理,然后将其赋值给效果图,然后输出效果图窗口。最后按下q键退出处理,并且在终端输入输出文件的名字,就可以将文件输出了。

2.寻找一张亮度较暗的图片作为源图片。打开终端。编译并运行程序。输入图片的路径和名字。然后按下回车键。

使用OpenCV进行图像处理-改变图像的亮度与对比度_第1张图片

可以看到图片的亮度明显变亮。这样就可以按下q,然后在终端输入文件名作为输出文件的名字。

 

你可能感兴趣的:(Linux)