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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_38304645/article/details/82821619

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

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

开发环境:CodeBlocks

#include <iostream>
#include <string>
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
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<Vec3b>(y,x)[c] = saturate_cast<uchar>(
                        g_srcImage.at<Vec3b>(y,x)[c] + g_BrightValue);

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

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

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

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

 

猜你喜欢

转载自blog.csdn.net/baidu_38304645/article/details/82821619