日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opencv感兴趣通道COI的使用

發(fā)布時(shí)間:2024/7/23 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv感兴趣通道COI的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

opencv中設(shè)置和獲取感興趣通道COI的函數(shù)如下:

SetImageCOI 設(shè)置感興趣通道

void cvSetImageCOI( IplImage* image, int coi );

image?圖像頭.??

coi?感興趣通道.

函數(shù) cvSetImageCOI 基于給定的值設(shè)置感興趣的通道。值 0 意味著所有的通道都被選定, 1 意味著第一個(gè)通道被選定等等。如果 ROI 是 NULL 并且COI!= 0, COI 被分配.


GetImageCOI 返回感興趣通道號(hào)

int cvGetImageCOI( const IplImage* image );

函數(shù)cvGetImageCOI 返回圖像的感興趣通道(當(dāng)所有的通道都被選中返回值是0).


要注意的是,大多數(shù)的opencv函數(shù)并不支持COI。

以下面代碼為例:

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

cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);?

cvSetImageCOI( imgCOI1 ,1 );

cvShowImage("mainWin", imgCOI1 );?

以上代碼讀入一張圖像,設(shè)置感興趣區(qū)域?yàn)?(即Blue通道),然后顯示出來。顯示結(jié)果仍為彩色圖像,也就是說cvShowImage函數(shù)并不支持COI的設(shè)定。


對(duì)于上面問題的解決方案:在opencv中 cvCopy cvSplit是支持感興趣通道COI的

cvCopy():

cvCopy的原型是:void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask=NULL );
cvCopy函數(shù)將設(shè)置過感興趣通道COI的源圖像復(fù)制到匹配大小的目標(biāo)圖像中。只復(fù)制COI通道
注意:在使用cvCopy這個(gè)函數(shù)之前,你必須用cvCreateImage()一類的函數(shù)先開一段內(nèi)存。后面的cvSplit也是同樣的要求

?cvSplit():
有些時(shí)候處理多通道圖像時(shí)不是很方便,在這種情況下,可以利用cvSplit()分別復(fù)制每個(gè)通道到多個(gè)單通道圖像。函數(shù)原型:void?cvSplit(const?CvArr*?src,CvArr?*dst0,CvArr?*dst1,?CvArr?*dst2,?CvArr?*dst3)??
如果需要,cvSplit()函數(shù)將復(fù)制src(即源多通道圖像)的各個(gè)通道到圖像dst0、dst1、dst2、dst3中。
目標(biāo)圖像必須與源圖像在大小和數(shù)據(jù)類型上匹配,當(dāng)然也應(yīng)該是單通道的圖像。
如果源圖像少于4個(gè)通道(這種情況經(jīng)常出現(xiàn)),那么傳遞給cvSplit()的不必要的目標(biāo)參數(shù)可設(shè)置為NULL。
使用cvSplit函數(shù)前源圖像不能設(shè)置過感興趣通道COI,否則會(huì)報(bào)錯(cuò)


下面是我總結(jié)的一個(gè)獲取指定感興趣通道COI的模板demo,以備以后使用

#include <iostream> #include <cv.h> #include <cxcore.h> #include <highgui.h>int main() { // 導(dǎo)入一張彩色圖像(設(shè)置感興趣通道),一張灰度圖像(設(shè)置感興趣區(qū)域)IplImage* imgCOI1=cvLoadImage("lena.bmp");IplImage* imgCOI2=cvLoadImage("lena.bmp");/*OpenCV默認(rèn)將讀入的圖像強(qiáng)制轉(zhuǎn)換為一幅三通道彩色圖像. 可以按這種方法修改讀入方式:img=cvLoadImage(fileName,flag);flag: >0 將讀入的圖像強(qiáng)制轉(zhuǎn)換為一幅三通道彩色圖像=0 將讀入的圖像強(qiáng)制轉(zhuǎn)換為一幅單通道灰度圖像<0 讀入的圖像通道數(shù)與所讀入的文件相同.*/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); //設(shè)置感興趣通道為b 彩色圖像的通道順序是 BGR,所以參數(shù)指定1cvSetImageCOI( imgCOI1 ,1 );cvShowImage("mainWin", imgCOI1 ); printf("have a look at the first channel(b)of image.我們發(fā)現(xiàn)當(dāng)使用cvShowImage時(shí)cvSetImageCOI對(duì)于感興趣通道的設(shè)置并不起作用\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我們發(fā)現(xiàn)cvCopy是支持COI的,我們抽出了紅色對(duì)應(yīng)的通道\nwait any key...\n");cvWaitKey(0); #pragma endregion#pragma region cvSplit方法獲取各個(gè)通道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。注意使用前不能設(shè)置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; }


總結(jié)

以上是生活随笔為你收集整理的opencv感兴趣通道COI的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。