PhotoShop算法实现--色彩平衡(偏色校正)(一)
色彩平衡是图像处理软件中一个重要环节,通过对图像的色彩平衡处理,可以校正图像色偏,过饱和或饱和度不足的情况,也可以根据自己的喜好和制作需要,调制需要的色彩,更好的完成画面效果,应用于多种软件和图像、视频制作中。
实现原理:根据用户指定的R、G、B三个色彩的调整分量,分别附加到对应的色彩分量上,从而改变原始图像的色彩,以达到用户的需求。
实现代码:
// 色彩增强: cR,cG,cB分别是RGB的增量(-255~255) // cbImg:彩色平衡后的返回图像 void PhotoShop:: ColorBalance(Mat& img, Mat& cbImg, int cR, int cG, int cB) { if ( cbImg.empty()) cbImg.create(img.rows, img.cols, img.type()); cbImg = cv::Scalar::all(0); int i, j; Size size = img.size(); int chns = img.channels(); if (img.isContinuous() && cbImg.isContinuous()) { size.width *= size.height; size.height = 1; } // 验证参数范围 if ( cR<-255 ) cR = -255; if ( cG<-255 ) cG = -255; if ( cB<-255 ) cB = -255; if ( cR>255) cR = 255; if ( cG>255) cG = 255; if ( cB>255) cB = 255; for ( i= 0; i<size.height; ++i) { const unsigned char* src = (const unsigned char*)(img.data+ img.step*i); unsigned char* dst = (unsigned char*)cbImg.data+cbImg.step*i; for ( j=0; j<size.width; ++j) { dst[j*chns] = saturate_cast<uchar>(src[j*chns] +cR); dst[j*chns+1] = saturate_cast<uchar>(src[j*chns+1] +cG); dst[j*chns+2] = saturate_cast<uchar>(src[j*chns+2] +cB); } } }
效果测试:
另外,关于色彩偏差的检测可以参考:图像偏色检测算法
作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。