OpenCV学习(十四)之彩色图像RGB通道的分离、合并与显示

来源:互联网 发布:电子相册在线制作软件 编辑:程序博客网 时间:2024/04/28 07:48

由于算法的需要,需要把彩色图像的R、G、B值分离出来,OpenCV中正好有split() 和 merge() 函数可以实现。

实验环境:VS2010 + OpenCV2.4.9

一、对单独彩色图片的RGB通道分离:

#include <iostream>#include "cv.h"#include "highgui.h"using namespace std;using namespace cv;int main(int argc,char* argv[]){Mat img = imread("lena.jpg"/*,CV_LOAD_IMAGE_COLOR*/);Mat channel[3];split(img,channel);imshow("original",img);imshow("B",channel[0]);imshow("G",channel[1]);imshow("R",channel[2]);//set blue channel to 0channel[0] = Mat::zeros(img.rows,img.cols,CV_8UC1);//merge red and green channelsmerge(channel,3,img);imshow("R_G_merge",img);waitKey(0);return 1;}
下面是实验图片:

第一张是原始图片:





二、对摄像头摄入视频帧的RGB彩色通道分离

int main(int argc,char* argv[]){VideoCapture cap;cap.open(0);if(!cap.isOpened()) {exit(0);}cap.set(CV_CAP_PROP_FRAME_WIDTH,250);cap.set(CV_CAP_PROP_FRAME_HEIGHT,250);cout << "Frame Width: " << cap.get(CV_CAP_PROP_FRAME_WIDTH) << endl;cout << "Frame Height: " << cap.get(CV_CAP_PROP_FRAME_HEIGHT) << endl;Mat frame;vector<Mat> rgb;cap >> frame;//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1));//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1));//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1));//rgb.push_back( Mat(frame.rows, frame.cols, CV_8UC1));namedWindow("original", 1);namedWindow("red", 1);namedWindow("green", 1);namedWindow("blue", 1);for(;;){cap >> frame;imshow("original", frame);split(frame, rgb);imshow("red", rgb.at(2));imshow("green", rgb.at(1));imshow("blue", rgb.at(0));if(waitKey(30) >= 0) break;}waitKey(0);return 1;}

上帝之手,O(∩_∩)O哈哈~


0 0
原创粉丝点击