调整图像亮度与对比度
主要内容
- 理论
- 代码
理论
图像变换可以看作如下:
- 像素变换 – 点操作
- 邻域操作 – 区域
调整图像亮度和对比度属于像素变换-点操作
代码
Mat m1; src.convertTo(m1, CV_32F); for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { if (src.channels() == 3) { float b = m1.at<Vec3f>(row, col)[0];// blue float g = m1.at<Vec3f>(row, col)[1]; // green float r = m1.at<Vec3f>(row, col)[2]; // red // output dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(b*alpha + beta); dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(g*alpha + beta); dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(r*alpha + beta); } else if (src.channels() == 1) { float v = src.at<uchar>(row, col); dst.at<uchar>(row, col) = saturate_cast<uchar>(v*alpha + beta); } } }
这里我们可以看出我们对图像的BGR三个通道都进行了增益,也就是在每一个像素上,对这三个值都加上了beta,这样就达到了增益的效果。同时为了限制像素值在0-255之间,我们上定了一个限制。也就是saturate_cast()函数。