OpenCV4 图像颜色均衡

/*
	1、图像均衡(直方图均衡化)试图获得具有均匀分布值的直方图
	2、均衡的结果是图像对比度的增强。
	3、均衡能够使得对比度较低的局部区域得到高对比度,从而分散最频繁的强度。
	4、当图像非常暗或者非常亮,并且背景和前景之间存在非常小的差异时,非常有用。
	5、通过使用直方图均衡化,可以增加对比度,并提升暴露过度或暴露不足的细节。

	缺点:背景噪声的增加以及随之而来的有用信号的减少。
	VERSION :OpenCV 4.1.0
*/

#include<iostream>
#include<opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat img;

const string path = "E:\\Codes\\A_VS\\1_OpenCV\\nature_monte.bmp";
/*
	为了均衡彩色图像,只需要均衡亮度通道。可以用每个颜色通道执行该操作,但结果不能使用。
	任何形式的彩色图像格式(HSV和YCrCb)来分离单个通道中的亮度分量,如下所示选择YCrCb并用Y通道
	(亮度)进行均衡。
*/
void equalizeCallback(int state=0, void* userData=NULL)
{
	Mat result;
	// Convert BGR image to YCbCr
	Mat ycrcb;
	//用cvtColor函数将BGR图像转化为YCrCb
	cvtColor(img, ycrcb, COLOR_BGR2YCrCb);
	// Split image into channels
	vector<Mat> channels;
	split(ycrcb, channels);
	// Equalize the Y channel only
	//函数只有两参数:输入参数和输出参数
	equalizeHist(channels[0], channels[0]);
	// Merge the result channels
	//合成生成的通道并将其转换为BGR格式
	merge(channels, ycrcb);
	// Convert color ycrcb to BGR
	cvtColor(ycrcb, result, COLOR_YCrCb2BGR);
	// Show image
	imshow("Equalized", result);
	waitKey(0);
	destroyAllWindows();
}

int main()
{
	img = imread(path, IMREAD_COLOR);
	namedWindow("RAW", WINDOW_AUTOSIZE);
	moveWindow("RAW", 100, 100);
	namedWindow("Equalized", WINDOW_AUTOSIZE);
	moveWindow("Equalized", 100 + img.cols, 100);
	imshow("RAW", img);
	equalizeCallback();

	return 0;
}

 

/*
    The algorithm normalizes the brightness and increases the contrast of the image.
    @param src Source 8-bit single channel image.
    @param dst Destination image of the same size and type as src
*/
void equalizeHist( InputArray src, OutputArray dst );

equalizeHist()函数,源图src必须是8位一维图像,目标图像dst也是8位一维图像,对于彩色图像,必须分通道逐一处理。但在实际中,RGB图像中的每个通道单独应用直方图均衡不太可能给出美观的结果,更好的做法,将LAB转换为更适合的空间,然后直方图均衡化用于亮度通道。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值