opencv感兴趣通道COI的使用

opencv中设置和获取感兴趣通道COI的函数如下:

SetImageCOI 设置感兴趣通道

void cvSetImageCOI( IplImage* image, int coi );

image 图像头.  

coi 感兴趣通道.

函数 cvSetImageCOI 基于给定的值设置感兴趣的通道。值 0 意味着所有的通道都被选定, 1 意味着第一个通道被选定等等。如果 ROI 是 NULL 并且COI!= 0, COI 被分配.


GetImageCOI 返回感兴趣通道号

int cvGetImageCOI( const IplImage* image );

函数cvGetImageCOI 返回图像的感兴趣通道(当所有的通道都被选中返回值是0).


要注意的是,大多数的opencv函数并不支持COI。

以下面代码为例:

IplImage* imgCOI1=cvLoadImage("lena.bmp");

cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); 

cvSetImageCOI( imgCOI1 ,1 );

cvShowImage("mainWin", imgCOI1 ); 

以上代码读入一张图像,设置感兴趣区域为1(即Blue通道),然后显示出来。显示结果仍为彩色图像,也就是说cvShowImage函数并不支持COI的设定。


对于上面问题的解决方案:在opencv中 cvCopy cvSplit是支持感兴趣通道COI的

cvCopy():

cvCopy的原型是:void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
cvCopy函数将设置过感兴趣通道COI的源图像复制到匹配大小的目标图像中。只复制COI通道
注意:在使用cvCopy这个函数之前,你必须用cvCreateImage()一类的函数先开一段内存。后面的cvSplit也是同样的要求

 cvSplit():
有些时候处理多通道图像时不是很方便,在这种情况下,可以利用cvSplit()分别复制每个通道到多个单通道图像。函数原型:void cvSplit(const CvArr* src,CvArr *dst0,CvArr *dst1, CvArr *dst2, CvArr *dst3)  
如果需要,cvSplit()函数将复制src(即源多通道图像)的各个通道到图像dst0、dst1、dst2、dst3中。
目标图像必须与源图像在大小和数据类型上匹配,当然也应该是单通道的图像。
如果源图像少于4个通道(这种情况经常出现),那么传递给cvSplit()的不必要的目标参数可设置为NULL。
使用cvSplit函数前源图像不能设置过感兴趣通道COI,否则会报错


下面是我总结的一个获取指定感兴趣通道COI的模板demo,以备以后使用

#include <iostream>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>int main()
{ // 导入一张彩色图像(设置感兴趣通道),一张灰度图像(设置感兴趣区域)IplImage* imgCOI1=cvLoadImage("lena.bmp");IplImage* imgCOI2=cvLoadImage("lena.bmp");/*OpenCV默认将读入的图像强制转换为一幅三通道彩色图像. 可以按这种方法修改读入方式:img=cvLoadImage(fileName,flag);flag: >0 将读入的图像强制转换为一幅三通道彩色图像=0 将读入的图像强制转换为一幅单通道灰度图像<0 读入的图像通道数与所读入的文件相同.*/if(!imgCOI1 || !imgCOI2)printf("Could not load image file: %s\n","lena.bmp");elseprintf("load image successful\n");cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE); cvMoveWindow("mainWin", 700, 100);cvShowImage("mainWin", imgCOI1 ); printf("have a look at the color image first\nwait any key...\n");cvWaitKey(0); //设置感兴趣通道为b  彩色图像的通道顺序是 BGR,所以参数指定1cvSetImageCOI( imgCOI1 ,1 );cvShowImage("mainWin", imgCOI1 ); printf("have a look at the first channel(b)of image.我们发现当使用cvShowImage时cvSetImageCOI对于感兴趣通道的设置并不起作用\nwait any key...\n");cvWaitKey(0); #pragma region cvCopy方法获取某一通道IplImage* BlueImage=cvCreateImage(cvGetSize(imgCOI1),IPL_DEPTH_8U,1);  cvSetImageCOI( imgCOI1 ,3 );cvCopy(imgCOI1,BlueImage);cvShowImage("mainWin", BlueImage ); printf("have a look at the third channel(r)of image which we use cvCopy to get.\n我们发现cvCopy是支持COI的,我们抽出了红色对应的通道\nwait any key...\n");cvWaitKey(0); #pragma endregion#pragma region cvSplit方法获取各个通道IplImage* R_Image=cvCreateImage(cvGetSize(imgCOI2),IPL_DEPTH_8U,1);  IplImage* G_Image=cvCreateImage(cvGetSize(imgCOI2),IPL_DEPTH_8U,1);  IplImage* B_Image=cvCreateImage(cvGetSize(imgCOI2),IPL_DEPTH_8U,1);  cvSplit(imgCOI2,B_Image,G_Image,R_Image,0);  //接收各通道的子图像要注意与源图像的通道顺序匹配,彩色即BGR。注意使用前不能设置COIprintf("have a look at the b,g,r channel in sequence which we use the cvSplit to get.\nwait any key three times...\n");cvShowImage("mainWin", B_Image ); cvWaitKey(0); cvShowImage("mainWin", G_Image ); cvWaitKey(0); cvShowImage("mainWin", R_Image ); cvWaitKey(0); #pragma endregioncvDestroyWindow("mainWin");cvReleaseImage(&imgCOI1 );cvReleaseImage(&imgCOI2);return 0;
}



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Socket通用TCP通信协议设计及实现(防止粘包,可移植,可靠)

Socket通用TCP通信协议设计及实现&#xff08;防止粘包&#xff0c;可移植&#xff0c;可靠&#xff09; 引文 我们接收Socket字节流数据一般都会定义一个数据包协议。我们每次开发一个软件的通信模块时&#xff0c;尽管具体的数据内容是不尽相同的&#xff0c;但是大体上的框…

浅谈 Adaboost 算法

注&#xff1a;本文全文引用自http://blog.csdn.net/carson2005/article/details/41444289 当然作者也是转载的&#xff0c;原文是http://blog.csdn.net/haidao2009/article/details/7514787 写的很好所以转载过来以便之后再次翻阅。 一 Boosting 算法的起源 boost 算法系列的起…

如何理解离散傅里叶变换(一)实数形式傅里叶变换

如何理解离散傅里叶变换&#xff08;一&#xff09; ——实数形式傅里叶变换 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 本文…

C#复数类Complex的封装

C#复数类Complex的封装----------------------------------------------------------------------------------------------------------------------------------------------------------本文作者&#xff1a;随煜而安时间&#xff1a; 二零一五年七月二十日--------------…

快速傅里叶变换(FFT)

快速傅里叶变换&#xff08;FFT&#xff09; ------------------------------------------------------------------------------------------------------------------- 作者&#xff1a;随煜而安 时间&#xff1a;2015/7/21 注&#xff1a;本文为作者原创文章&#xff0c…

快速傅里叶变换(FFT)的C#实现及详细注释

快速傅里叶变换&#xff08;FFT&#xff09;的C#实现及详细注释 ------------------------------------------------------------------------------------------------------------------- 作者&#xff1a;随煜而安 时间&#xff1a;2015/7/21 注&#xff1a;本文为作者原创文…

风机桨叶故障诊断(一) 样本的获取

风机桨叶故障诊断&#xff08;一&#xff09; 样本的获取今天团队接了个新项目&#xff0c;做一个风机桨叶故障诊断系统。虽然马上就是准备考研的关键期了&#xff0c;可是一想到这是我学习了机器学习后遇到的第一个实际项目&#xff0c;我觉得参与进来&#xff0c;也帮导师分担…

风机桨叶故障诊断(二) 获取图像几何主方向

风机桨叶故障诊断&#xff08;二&#xff09; 获取图像几何主方向 昨天&#xff0c;我将视频资源按帧抽取并筛选得到了可以用来提取样本的图像库。今天还是进行项目的准备工作。当我们拿到一张图片&#xff0c;我们的软件要做的大致可以分为三个步骤&#xff1a;从原图中识别桨…

风机桨叶故障诊断(三) 识别桨叶——初步构建BP神经网络

风机桨叶故障诊断&#xff08;三&#xff09; 识别桨叶——初步构建BP神经网络 新的一天&#xff0c;希望有好的运气。今天开始着手系统的第一个模块&#xff0c;从一幅图像中寻找到桨叶所在的位置。第一直觉我们的识别任务属于难度比较大&#xff0c;干扰因素多的了&#xff…

风机桨叶故障诊断(四) 正负样本准备——从图像中随机扣图

风机桨叶故障诊断&#xff08;四&#xff09; 正负样本准备——从图像中随机扣图 在之前的工作中&#xff0c;我们已经训练了一个400252的三层BP神经网络&#xff0c;通过这个基础的神经网络进行了误差分析&#xff0c;对我们的问题有了更深刻的认识。现在我们要开始不断完善我…

风机桨叶故障诊断(五) 修改隐含层神经元个数的尝试

风机桨叶故障诊断&#xff08;五&#xff09; 修改隐含层神经元个数的尝试 我们已经为训练一个更为稳健的神经网络做好了样本的准备工作&#xff0c;那么我们开始下一步的工作吧&#xff01; 我们已经有了样本集&#xff0c;目前我筛选出来了247个正样本&#xff0c;652个负样本…

风机桨叶故障诊断(六) 利用自编码器进行特征学习

风机桨叶故障诊断&#xff08;六&#xff09; 利用自编码器进行特征学习 在之前的工作中&#xff0c;我已经初步构建了三层的BP神经网络&#xff0c;并已经从样本集的选取&#xff0c;模型的选择&#xff08;隐含层神经元个数&#xff09;&#xff0c;和输出层神经元阈值选择这…

风机桨叶故障诊断(七) 滑动窗与非极大值抑制NMS

风机桨叶故障诊断&#xff08;七&#xff09;滑动窗与非极大值一直NMS 到目前为止&#xff0c;我已经利用自编码神经网络提取特征后训练得到了BP神经网络&#xff08;参见&#xff1a;点击打开链接&#xff09;&#xff0c;且在测试样本集上表现不错。下面我们就要应用到实际中…

Distinctive Image Features from Scale-Invariant Keypoints-SIFT算法译文

本文全篇转载自如下博客&#xff0c;感谢博主的无私分享 http://www.cnblogs.com/cuteshongshong/archive/2012/05/25/2506374.html ------------------------------------------------------------------------------------------------------ 从尺度不变的关键点选择可区分的…