【
OpenCV
】分离多通道图像
RGB
的值
分类: 【OpenCV】 2012-05-11 21:25 3793 人阅读 评论(15) 收藏 举报
dst 数据结构存储 mergec#null
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/
details/7558657
在《访问图像中每个像素的值》中我们介绍了存储图像的结构体 IplImage 的数据结构。多
通道字节/浮点型图像中存储了每个像素 RGB 三信道的值。
最近在做的项目中需要提取图像 ROI 区域 RGB 的平均值,发现有一个 cvAvg 函数:
[cpp] view plaincopyprint?
1. CvScalarcvAvg(constCvArr*arr,constCvArr*mask=NULL);
可以独立计算数组每个通道的平均值,非常方便。所以用如下方式即可达到效果:
[cpp] view plaincopyprint?
1. CvScalaravgChannels=cvAvg(img);
2. doubleavgB=avgChannels.val[0];
3. doubleavgG=avgChannels.val[1];
4. doubleavgR=avgChannels.val[2];
那如果我们想分离出每个通道的具体值,可以用 cvSlip(或 cvCvtPixToPlane)函数:
[cpp] view plaincopyprint?
1. voidcvSplit(constCvArr*src,CvArr*dst0,CvArr*dst1,
2. CvArr*dst2,CvArr*dst3);
3. #definecvCvtPixToPlanecvSplit
如果再想把分离的图像显示出来,可以分别 create 三个单通道的图像,即:
[cpp] view plaincopyprint?
1. IplImage*rImg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
2. IplImage*gImg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
3. IplImage*bImg=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
此时的效果是这样的,三个灰色图像: