怎么做域名网站备案/seo站外推广
在opencv\sources\samples下面提供了很多的官方例程,是学习OpenCV的最好的资源。
理论:图像变换可以看做如下:像素变换–点操作邻域变换–区域操作
其中图像亮度和对比度属于像素变换–点操作
α是对比度调节参数,
β是调节亮度。
一些主要API:
Mat new_image = Mat::zeros(image.size(),image.type()); //创建一个空白图像
saturate_cast< uchar>(value)确保值大小范围是0~255之间
Mat.at< Vec3b>(y,x)[index]=value //给每个像素点的每个通道赋值
代码参考:#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main()
{
Mat src,dst;
src = imread("1.jpg");
char input_win[] = "input image";
namedWindow(input_win,CV_WINDOW_AUTOSIZE);
imshow(input_win,src);
int height = src.rows;
int width = src.cols;
double alpha = 5.2; //对比度参数
double beta = 30; //亮度参数
//src.convertTo(m1,CV_64F);
dst = Mat::zeros(src.size(),src.type());
for(int row = 0;row
for(int col = 0;col
if(src.channels() == 3){ //三通道数据
float b = src.at(row,col)[0]; //第一个通道是blue,第二个是green,第三个是red,每个像素是3个uchar类型的向量
float g = src.at(row,col)[1];
float r = src.at(row,col)[2];
dst.at(row,col)[0] = saturate_cast(b*alpha+beta); //限定范围大小
dst.at(row,col)[1] = saturate_cast(g*alpha+beta);
dst.at(row,col)[2] = saturate_cast(r*alpha+beta);
}
else if(src.channels() == 1){
float v = src.at(row,col);
dst.at(row,col) = saturate_cast(v*alpha+beta);
}
}
}
char output_title[] = "contrast and brightness change demo";
namedWindow(output_title,CV_WINDOW_AUTOSIZE);
imshow(output_title,dst);
waitKey(0);
return 0;
}
效果展示:
————————————————
版权声明:本文为CSDN博主「南山二毛」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_16481211/article/details/79564909
#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。如果需要本贴图片源码等资源,请向勇哥索取。