PhotoShop算法实现--色彩通道(九)

PhotoShop算法实现--色彩通道(九)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

           一个通道同一个图像层之间的最根本的区别在于:图层的各个像素点的属性是以红、绿、蓝三原色的数值来表示的,而通道层中的像素颜色是由一组原色的亮度来组成的。通俗点说:通道中只有一种颜色的不同亮度,是一种灰度图像。

通过通道可以实现三种不同的图像效果:

       (1)轮换通道(Rotate Channel):将一副图像的R、G、B三分量进行轮换输出显示,即将原来的绿色分类替换成红色分量,将原来的蓝色分量替换成绿色分量,原来的红色分量替换成蓝色。

         实现代码如下:

// 色彩轮换
void PhotoShop::RotateChannel(Mat& img, Mat &gImg)
{
	if ( gImg.empty())	
		gImg.create(img.rows, img.cols, CV_8UC3);		

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

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

	//int chns = gImg.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] =  src[j*chns+1];
			dst[j*chns+1] = src[j*chns+2];
			dst[j*chns+2] = src[j*chns];
		}
	}	
}
         实现效果:


        (2)提取通道(Extract Channel):将用户指定的通道提取出来,用一幅灰度图像显示。

            实现代码:

// ChannelNo:从1开始
void PhotoShop::ExtractChannel(Mat& img, Mat& gImg, int ChannelNo)
{
	if ( gImg.empty())	
		gImg.create(img.rows, img.cols, CV_8UC1);		

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

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

	//int chns = gImg.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] =  src[j*chns+ChannelNo-1];
			
		}
	}	
}
        实现效果:


          (3)过滤通道(Filtered Channel):保留用户指定的通道,使之只显示指定的色彩通道,其他通道的颜色被删除。该种形式的实现算法与第二种类似,这里不再给出,可以参考上面。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值