PhotoShop算法实现--对比度增强(三)
假设有一副图像,成像时光照不足,使得整幅图像变暗,或者成像时光照国强,使得整幅图像偏亮,这些情况就称为低对比度,即颜色挤在一起,没有拉开。对比度调整就是使图像的颜色更符合人们的需要,以实现一些效果。通常采用对比度增强,把感兴趣的颜色范围拉开,使得该范围内的像素,亮的越亮,暗的越暗,从而达到对比度增强的目的。
实现原理:根据用户指定的一个对比度,分别与原始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 欢迎转载或分享,但请务必声明文章出处。