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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenCV】图像的通道分离

發布時間:2025/4/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV】图像的通道分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分離圖像通道采用函數cvSplit。

?

函數原型:void cvSplit(const CvArr* src, CvArr* dst0, CvArr* dst1, CvArr* dst2, CvArr* dst3)

分離出來的順序是逆序的,這個要注意。

?

cvSplit(pImg,bImg,gImg,rImg,0);


分離出來的是單通道的圖,顯示出來是這樣的:

?

通過cvMerge合并通道實現彩色圖像的顯示,并且也是按照BGR的順序來輸入的。

函數原型:void cvMerge(const CvArr* src0, const CvArr* src1, const CvArr* src2, const CvArr* src3, CvArr* dst)

這里有個小問題,假如說代碼是這樣的:

?

??? cvMerge(bImg,0,0,0,pImg1);cvMerge(0,gImg,0,0,pImg2);cvMerge(0,0,rImg,0,pImg3);

顯示出來的圖像是這樣的:

再對通道進行分離的結果是這樣的:

以Blue通道的為例

照理說其他通道的值應該為0的才對,也就是說應該顯示為黑色,為灰色意味著灰度值不為0。為什么會這樣?具體的原因要看源碼了,估計是當通道指針為0的時候,該通道會附一個值,但是剛剛用printf試了下輸出是0沒錯。這下子困惑了。暫時不管他先。

我們在通道賦值1來代替0試試看:

for(int i=0;i<pTem->nChannels;i++){value.val[0]=0x1;//value.val[1]=0x1;//value.val[2]=0x1;}for(int i=0;i<pTem->height;i++){for(int j=0;j<pTem->width;j++){cvSet2D(pTem,i,j,value);}}


這樣輸出的結果就成了這:

猴哥終于被分離了

?

源代碼:

#include "stdafx.h" #include <opencv2/opencv.hpp> int main() {IplImage* pImg;IplImage *pImg1,*pImg2,*pImg3;IplImage *rImg,*bImg,*gImg;IplImage *pTem;CvScalar value;pImg=cvLoadImage("Baboon.jpg",CV_LOAD_IMAGE_COLOR);pTem=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);for(int i=0;i<pTem->nChannels;i++){value.val[0]=0x1;//value.val[1]=0x1;//value.val[2]=0x1;}for(int i=0;i<pTem->height;i++){for(int j=0;j<pTem->width;j++){cvSet2D(pTem,i,j,value);}}cvNamedWindow("1",CV_WINDOW_AUTOSIZE);cvNamedWindow("2",CV_WINDOW_AUTOSIZE);cvNamedWindow("3",CV_WINDOW_AUTOSIZE);cvNamedWindow("4",CV_WINDOW_AUTOSIZE);cvNamedWindow("5",CV_WINDOW_AUTOSIZE);cvShowImage("1",pImg);rImg=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);bImg=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);gImg=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,1);pImg1=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,3);pImg2=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,3);pImg3=cvCreateImage(cvSize(pImg->width,pImg->height),pImg->depth,3);cvSplit(pImg,bImg,gImg,rImg,0);cvMerge(bImg,pTem,pTem,0,pImg1);cvMerge(pTem,gImg,pTem,0,pImg2);cvMerge(pTem,pTem,rImg,0,pImg3);/*cvMerge(bImg,0,0,0,pImg1);cvMerge(0,gImg,0,0,pImg2);cvMerge(0,0,rImg,0,pImg3);*/cvSplit(pImg1,bImg,gImg,rImg,0);printf("%lf",gImg->imageData[0]);cvNamedWindow("6",CV_WINDOW_AUTOSIZE);cvNamedWindow("7",CV_WINDOW_AUTOSIZE);cvNamedWindow("8",CV_WINDOW_AUTOSIZE);//cvShowImage("6",pImg1);cvShowImage("2",rImg);cvShowImage("3",bImg);cvShowImage("4",gImg);cvShowImage("5",pTem);cvShowImage("6",pImg1);cvShowImage("7",pImg2);cvShowImage("8",pImg3);cvWaitKey(0); }


?

?

轉載于:https://www.cnblogs.com/snake-hand/archive/2013/06/12/3132809.html

總結

以上是生活随笔為你收集整理的【OpenCV】图像的通道分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。