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


转自:http://lib.csdn.net/article/opencv/25901

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

作者:ZYTTAE

由于算法的需要,需要把彩色图像的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 0
	channel[0] = Mat::zeros(img.rows,img.cols,CV_8UC1);
	//merge red and green channels
	merge(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哈哈~


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值