opencv [c++] 利用滚动条进行对比度与亮度调节以及拆分颜色通道

 1.利用滚动条TrackBar进行对比度与亮度调节

#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

Mat srcImg;
Mat dstImg;
int Contrast_value = 20;
int Bright_value = 20;
//滚动条回调事件
void onChange(int, void*)
{
	for (int i = 0; i < srcImg.rows; i++)
	{
		for (int j = 0; j < srcImg.cols; j++)
		{
			//三个通道的对比度与亮度调节 以及 溢出保护
 			dstImg.at<Vec3b>(i, j)[0] = saturate_cast<uchar>((Contrast_value * 0.01 * srcImg.at<Vec3b>(i, j)[0])+ Bright_value);
			dstImg.at<Vec3b>(i, j)[1] = saturate_cast<uchar>((Contrast_value * 0.01 * srcImg.at<Vec3b>(i, j)[1]) + Bright_value);
			dstImg.at<Vec3b>(i, j)[2] = saturate_cast<uchar>((Contrast_value * 0.01 * srcImg.at<Vec3b>(i, j)[2]) + Bright_value);
		}
	}
	imshow("输出窗口", dstImg);
}



int main()
{
	srcImg = imread("ROI.bmp");
	dstImg = Mat::zeros(srcImg.size(), srcImg.type());
	namedWindow("输出窗口", WINDOW_NORMAL);
	createTrackbar("对比度:", "输出窗口", &Contrast_value, 300, onChange, 0);
	createTrackbar("亮度:", "输出窗口", &Bright_value, 200, onChange, 0);

    //给滚动条回调函数赋初值
	onChange(Contrast_value, 0);
	onChange(Bright_value, 0);

	imshow("original image", srcImg);
	waitKey(0);
}

结果图示:

2.OpenCV拆分颜色通道

#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;

Mat srcImg, dstImg;
Mat R, G, B;
vector<Mat> channels;

int main()
{
	srcImg = imread("ROI.bmp");
	namedWindow("output", WINDOW_NORMAL);
	resizeWindow("output", 512, 512);
	split(srcImg, channels);
	B = channels[0];
	G = channels[1];
	R = channels[2];

	imshow("output", srcImg);
	imshow("B", B);
	imshow("G", G);
	imshow("R", R);
	waitKey(0);
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月22日
下一篇 2022年5月22日

相关推荐