[学习opencv]彩色图像通道分离、合成
将彩色图像RGB三色分离出来是一个很有意义的操作。
用到void split(const Mat& mtx,vector<Mat>& mv),void merge(const vector<Mat>& mv,Mat& dst)这两个函数。
#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; }
原图:
b通道:
g通道:
r通道: