现在的位置: 首页 > 综合 > 正文

PhotoShop算法实现–对比度增强(三)

2017年10月04日 ⁄ 综合 ⁄ 共 1186字 ⁄ 字号 评论关闭

         

PhotoShop算法实现--对比度增强(三)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

         假设有一副图像,成像时光照不足,使得整幅图像变暗,或者成像时光照国强,使得整幅图像偏亮,这些情况就称为低对比度,即颜色挤在一起,没有拉开。对比度调整就是使图像的颜色更符合人们的需要,以实现一些效果。通常采用对比度增强,把感兴趣的颜色范围拉开,使得该范围内的像素,亮的越亮,暗的越暗,从而达到对比度增强的目的。

        实现原理:根据用户指定的一个对比度,分别与原始R、G、B色彩分量进行一定比例的缩放,从而拉开原色色彩亮度级别的分布,达到对比度增强的作用

        实现代码:

void PhotoShop::Contrast(Mat& img, Mat& bImg, int degree)
{
	if ( bImg.empty())	
		bImg.create(img.rows, img.cols, img.type());		

	bImg = cv::Scalar::all(0);

	int i, j;
	Size size = img.size();
	int chns = img.channels();

	if (img.isContinuous() && bImg.isContinuous())
	{
		size.width *= size.height; 
		size.height = 1;
	}

	// 验证参数范围
	if ( degree<-100) degree = -100;
	if ( degree> 100) degree = 100;	

	double contrast = (100.0+degree)/100.0;
	contrast *= contrast;

	for (  i= 0; i<size.height; ++i)
	{
		const unsigned char* src = (const unsigned char*)(img.data+ img.step*i);
		unsigned char* dst = (unsigned char*)bImg.data+bImg.step*i;
		for (  j=0; j<size.width; ++j)
		{			
			dst[j*chns] = saturate_cast<uchar>(((src[j*chns]/255.0 -0.5)*contrast +0.5)*255);
			dst[j*chns+1] = saturate_cast<uchar>(((src[j*chns+1]/255.0 -0.5)*contrast +0.5)*255);
			dst[j*chns+2] = saturate_cast<uchar>(((src[j*chns+2]/255.0 -0.5)*contrast +0.5)*255);			
		}
	}	
}

         实现效果:


作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。

抱歉!评论已关闭.