1. 程式人生 > >opencv--影象色彩和對比度

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;
    在這裡插入圖片描述