您的位置:首页 > 运维架构

PhotoShop算法实现--负像(反转)图像处理(七)

2014-11-30 20:36 369 查看
PhotoShop算法实现--负像(反转)图像处理(七)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai
负像(Negative)即通常所称的底片效果,也有人称之为负片或反转(Invert)。负像图像处理算法就是用255减去原图的R、G、B分量值。图像的负像处理实际上久是对色彩进行反转的过程,对于黑白图像,它的处理是将白色变黑色,黑色变白色;对于彩色图像就是用它的不色替换原始颜色。

有三种实现方法:

1)pixelValue = 255 - pixelValue

2) pixelValue = 255^pixelValue(抑或)

3)pixelValue = ~pixelValue (按位非)

实现代码:

void PhotoShop::Invert(Mat& img, Mat &gImg )
{
	if ( gImg.empty())	
		gImg.create(img.rows, img.cols, img.type());		

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

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

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

	for (  i= 0; i<size.height; ++i)
	{
		const unsigned char* src = (const unsigned char*)(img.data+ img.step*i);
		unsigned char* dst = (unsigned char*)gImg.data+gImg.step*i;
		for (  j=0; j<size.width; ++j)
		{	
			//dst[j*chns] = 255- src[j*chns];
			//dst[j*chns+1] = 255- src[j*chns+1];
			//dst[j*chns+2] = 255- src[j*chns+2];

			dst[j*chns] = 255^src[j*chns];   // 抑或
			dst[j*chns+1] = 255^src[j*chns+1];
			dst[j*chns+2] = 255^src[j*chns+2];

			//dst[j*chns] = ~src[j*chns];   //  按位非
			//dst[j*chns+1] = ~src[j*chns+1];
			//dst[j*chns+2] = ~src[j*chns+2];					
		}
	}	
}
实现效果:



提示:在图像处理中,像素与像素之间,或像素与某些特殊常数(如0、0xFF)之间进行按位与、按位或、按位非及抑或等运算,可以大大提高处理效率。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: