通道的分割与合并,用到的是cvSplit(split)与cvMerge(merge),它可以把多通道分割成单通道,并且也可以把单通道合并成多通道,下面的实例为对通道进行分割与合并,并图中的RGB值分开,并且分别显示出来,可以看到图片中RGB值的分布情况。
int main() { IplImage *Image1; IplImage *RedImage,*GreenImage,*BlueImage; IplImage *Channel1,*Channel2,*Channel3; CvSize Size1; Image1=cvLoadImage("grotto.jpg",1); Size1=cvGetSize(Image1); Channel1=cvCreateImage(Size1,IPL_DEPTH_8U,1); Channel2=cvCreateImage(Size1,IPL_DEPTH_8U,1); Channel3=cvCreateImage(Size1,IPL_DEPTH_8U,1); cvSplit(Image1,Channel1,Channel2,Channel3,0); BlueImage=cvCreateImage(Size1,IPL_DEPTH_8U,3); GreenImage=cvCreateImage(Size1,IPL_DEPTH_8U,3); RedImage=cvCreateImage(Size1,IPL_DEPTH_8U,3); cvMerge(Channel1,0,0,0,BlueImage); cvMerge(0,Channel2,0,0,GreenImage); cvMerge(0,0,Channel3,0,RedImage); cvNamedWindow("Red pic",1); cvShowImage("Red pic",RedImage); cvNamedWindow("Green pic",1); cvShowImage("Green pic",GreenImage); cvNamedWindow("Blue pic",1); cvShowImage("Blue pic",BlueImage); cvWaitKey(0); }
#include "cv.h" #include "highgui.h" #include <iostream> #include <vector> using namespace std; using namespace cv; int main(int argc, char* argv[]) { Mat src = imread("misaka.jpg"); Mat dst; vector<Mat> bgr; //颜色通道分离 //输入图像 //分离后各通道 split(src,bgr); //颜色通道合成 //输入各通道 //输入图像 merge(bgr,dst); imshow("dst",dst); //用彩色图像形象的表示一下,除了原通道保留,其余两通道置0 Mat tmp(src.size(),CV_8U,Scalar(0)); vector<Mat> b,g,r; //用来表示的彩色图像 for(int i=0;i<3;i++) { if(i==0) b.push_back(bgr[0]); else b.push_back(tmp); if(i==1) g.push_back(bgr[1]); else g.push_back(tmp); if(i==2) r.push_back(bgr[2]); else r.push_back(tmp); } merge(b,dst); imshow("b",dst); merge(g,dst); imshow("g",dst); merge(r,dst); imshow("r",dst); waitKey(); return 0; }