您的位置:首页 > 运维架构

opencv处理图像对比度和亮度

2016-12-11 14:39 176 查看
公式:g(x) = af(x) + b, 其中:

f(x)表示原始图像像素值, g(x)表示处理后图像像素值。a > 0, a,b分别控制图像的对比度和亮度。

具体代码如下:

void ChangeContrastAndBrightness(Mat& myImage) {
Mat new_image = Mat::zeros(myImage.size(), myImage.type());

//initialize values
std::cout<<" Basic Linear Transforms "<<std::endl;
std::cout<<"-------------------------"<<std::endl;
std::cout<<"* Enter the alpha value [1.0-3.0]: ";
std::cin>>alpha;
std::cout<<"* Enter the beta value [0-100]: ";
std::cin>>beta;

for (int y = 0;y < myImage.rows;y++) {
for (int x = 0;x < myImage.cols;x++) {
for (int c = 0; c < 3;c++) {
new_image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha*(myImage.at<Vec3b>(y, x)[c]) + beta); //防溢出
}
}
}
namedWindow("original image", 1);
namedWindow("new image", 1);

imshow("original image", myImage);
imshow("new image", new_image);
waitKey(0);
}


说明:saturate_cast防止数据溢出, 若值小于0,则结果为0, 若值大于255,则结果为255.

参考:

docs.opencv.org/2.4.13/doc/tutorials/tutorials.html

learning opencv
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv