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
实现效果:
(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
实现效果:
(3)过滤通道(Filtered Channel):保留用户指定的通道,使之只显示指定的色彩通道,其他通道的颜色被删除。该种形式的实现算法与第二种类似,这里不再给出,可以参考上面。
作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。