opencv--图像色彩和对比度

处理图像经常会对图像色彩进行增强,这就是改变图像的亮度和对比度。本章基于opencv对图像的亮度和对比度进行处理操作。其实,这是对图像的每一个像素点进行相应的操作。
在这里插入图片描述
在这个公式中

  • alpha
    第一个参数α必须是大于零,不然则基本上没有意义了。
    α能使图像像素成倍数的增长或降低(α<1),改变了是图像的对比度,因为使图像的差值变化了。
  • beta
    β可为负,也可为正。
    任何一个像素都在(0, 255)之间,加上一个值或减去一个值则会使这个像素点变大或变小,其实就是向白色或向黑色靠近(0为黑,255为白),所以改变的是图像的亮度。

相关函数

在这里插入图片描述

实例

int main() {
	Mat src,src1 ,dst;
	src = imread("D:/test/first.png",0);
	if (!src.data) {
		cerr << "open error" << endl;
		return -1;
	}

	dst = Mat::zeros(src.size(), src.type());
	float alpha = 1.2;
	float beta = 30;
	int rows = src.rows;
	int cols = src.cols;
	int channals = src.channels();
	src.convertTo(src1, CV_32F);

	for (int row = 0; row < rows; row++) {
		for (int col = 0; col < cols; col++) {
			if (channals == 1) {
				float s = src.at<uchar>(row, col);
				dst.at<uchar>(row, col) = saturate_cast<uchar>(alpha * s + beta);
			}
			else {
		      float b = src1.at<Vec3f>(row, col)[0];
			  float g = src1.at<Vec3f>(row, col)[1];
			  float r = src1.at<Vec3f>(row, col)[2];
			  dst.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(alpha * b + beta);
			  dst.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(alpha * g + beta);
			  dst.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(alpha * b + beta);
			}
		}
	}
	imshow("yuantu", src);
	imshow("new", dst);
	waitKey(0);
	return 0;


}

在这里插入图片描述
在这里插入图片描述

  • float alpha = 0.8;
    float beta = 20;
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41498261/article/details/83958875