版权声明:本文为博主原创文章,未经博主允许不得转载。 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,然后在终端输入文件名作为输出文件的名字。