OpenCV(7): 調整圖像亮度和對比度


注:轉載請標明原文出處鏈接:https://xiongyiming.blog.csdn.net/article/details/106987593


圖像變換可以看作如下:
(1) 像素變換:點操作
(2) 鄰域操作:區域
調整圖像亮度和對比度屬於像素變換——點操作

g(i,j)=αf(i,j)+β g(i,j) = \alpha \cdot f(i,j) + \beta

其中,α>0\alpha > {\rm{0}}β\beta 是增益變量。通過調整 α\alpha 的大小可以使圖像變亮變暗

(1) 當 α>1\alpha > {\rm{1}} ,圖像 變亮
(2) 當 α<1\alpha < {\rm{1}},圖像 變暗


代碼中重要部分的解釋:
(1) Mat new_image = Mat::zeros( image.size(), image.type() ); //創建和原圖像大小和類型一致的空白圖像, 像素值初始化爲0;
(2) saturate_cast<uchar>(value) //確保值大小範圍爲0~255之間;
(3) Mat.at<Vec3b>(y, x)[index]=value; //給每個像素點每個通道賦值;



代碼示例

#include <opencv2/core/core.hpp> 
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>

#include <iostream>
#include <math.h>




using namespace cv;
using namespace std;
int main(int argc, char** args) 
{
	Mat src = imread("ZXP1.jpg", IMREAD_UNCHANGED);
	if (src.empty()) 
	{
		cout << "could not find the image resource..." << std::endl;
		return -1;
	}
	namedWindow("Original Image", CV_WINDOW_AUTOSIZE);
	imshow("Original Image", src);

	int height = src.rows;
	int width = src.cols;

	Mat dst;
	dst = Mat::zeros(src.size(), src.type());

	float alpha = 1.2;
	float beta = 30;

	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];
				float g = m1.at<Vec3f>(row, col)[1];
				float r = m1.at<Vec3f>(row, col)[2];

				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);
			}

		}

	}

	namedWindow("Output Image", CV_WINDOW_AUTOSIZE);
	imshow("Output Image", dst);
	
	

	

	waitKey(0);

	return 0;
}

運行結果


(1) alpha = 1.2; beta = 30; ——> 圖像變亮

在這裏插入圖片描述



(2) alpha = 0.8; beta = 30; ——> 圖像變暗

在這裏插入圖片描述






參考資料

[1] https://edu.51cto.com/course/7521.html?source=so



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章