Opencv C++ 調整圖片的亮度與對比度

圖片下載地址:
鏈接: https://pan.baidu.com/s/1dtEdFa5XWG4xi1aXv5GbtQ 提取碼: cteu

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;
using namespace cv;

int g_nContrastValue;		//對比度;
int g_nBrightValue;			//亮度;

void on_contrastAndBright(int, void*);
Mat img_src;
Mat img_dist;

int main()
{
	//讀取圖片
	img_src = imread("../data/5_4_image.jpg");
	img_dist = Mat::zeros(img_src.size(), img_src.type());

	g_nBrightValue = 80;
	g_nContrastValue = 80;

	//創建toolbar 控件
	namedWindow("image");
	namedWindow("imag_src");

	createTrackbar("亮度", "image", &g_nBrightValue, 300, on_contrastAndBright);
	createTrackbar("對比度", "image", &g_nContrastValue, 200, on_contrastAndBright);

	//註冊回調函數
	on_contrastAndBright(g_nBrightValue, 0);
	on_contrastAndBright(g_nContrastValue, 0);

	//顯示圖片
	imshow("image", img_src);

	while (char(waitKey(1)) != 'q'){}
	
	return 0;
}

//修改亮度 對比度函數
void on_contrastAndBright(int, void*)
{
	for (int y=0; y < img_dist.rows; y++)
	{
		for (int x = 0; x < img_dist.cols; x++)
		{
			for (int c = 0; c < 3; c++)
			{
				img_dist.at<Vec3b>(y, x)[c] = saturate_cast<uchar>((g_nContrastValue * 0.01) * (img_src.at<Vec3b>(y, x)[c]) + g_nBrightValue);
			}
		}
	}

	imshow("imag_src", img_src);
	imshow("image", img_dist);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章