OpenCV學習心得(5) -- 圖像通道分離

原创 2012年03月21日 19:18:59

轉載請注明出處與作者

OpenCV提供了一個函數可以進行通道的分離,就是 cv::split.

void split(const Mat& mtx, vector<Mat>& mv);

void split(const Mat& mtx, Mat* mv);

這個函數的第二個參數是一個std::vector容器.

需要注意的是此容器必須要預先預留空間,否則會出現內存洩露問題.

例如

//std::vector<cv::Mat> mv; //這是錯誤的.因為這樣定義的vector並沒申請Mat空間.

可以使用下面的方式申請:

std::vector<cv::Mat> mv(3); 

也可以使用下面的方式:

std::vector<cv::Mat> mv;

mv.push_back(cv::Mat());

mv.push_back(cv::Mat());

mv.push_back(cv::Mat());

cv::split(src,mv);


cv::split的另一個重載形式是使用一個預先申請好的Mat數組,將數組的頭指針傳進第二個參數.


下面是類中的代碼:

//!分離一個通道,如果要求的通道index無效則返回false. filltype為設置預設調色板填充類型,為NULL為不設置.此函數不改變ROI.此函數針對整個圖片進行處理
	bool SplitChannel(int channel_index,RGBQUAD_FILLTYPE *filltype=NULL);
bool COpenCVImage::SplitChannel(int channel_index,RGBQUAD_FILLTYPE *filltype)
{
	if(m_src.channels()<=channel_index) return false;
	std::vector<cv::Mat> mv(m_src.channels());
	cv::split(m_src,mv);
	m_src=mv[channel_index];
	if(filltype)
	{
		m_rgbQuad_filltype=*filltype;
	}
	m_modifyed_for_draw=true;
	return true;
}

看到其他論壇上有人問通道分離后使用CvvImage類顯示的時候都是灰度圖..這很正常的..因為CvvImage類中顯示單channel圖像的時候在調色板中填充的就是0~255的灰度值.顯示的當然是灰度圖像啦..

我在這個類中有做一些改變.也就是建立了一個RGBQUAD_FILLTYPE m_rgbQuad_filltype的成員變量,當顯示的時候,在填充調色板的時候會根據這個值來確定調色板中是填充什麽樣的顏色.只有5個顏色可選,灰度,紅,綠,藍,黑白.

例如:當分離一個3通道的BGR圖像的Blue通道的時候可以這樣做:

RGBQUAD_FILLTYPE tmp_type;

tmp_type=RGBQUAD_FILLTYPE_BLUE;

SplitChannel(0,tmp_type);//顯示藍色通道的的圖


tmp_type=RGBQUAD_FILLTYPE_RGB;

SplitChannel(2,tmp_type);//顯示紅色通道的圖


tmp_type=RGBQUAD_FILLTYPE_BLUE;

SplitChannel(0,tmp_type);//顯示藍色通道的的圖

RGBQUADFillType(RGBQUAD_FILLTYPE_GRAY); //將藍色通道的圖的調色板設置為灰度圖.這時顯示的就是灰度圖.

效果如下.



這樣顯示的圖片就是

(居然傳不上圖片)..只好等以後上傳了..



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

opencv学习(5)图像像素的访问、颜色通道的分离和融合

代码都是源于毛星云的《opencv3.0编程入门》1、计时函数 getTickCount()和getTickFrequency()函数; getTickCount()函数返回CPU自某个事件...

opencv学习(十四)之图像颜色通道分离和融合

在图像处理时,我们接触到的彩色以RGB居多,为了分析图像在某一通道上的特性,需要将图像的颜色通道进行分离,或者是在对某一颜色通道处理后重新进行融合。opencv提供了split()函数来进行颜色通道的...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

由于算法的需要,需要把彩色图像的R、G、B值分离出来,OpenCV中正好有split() 和 merge() 函数可以实现。 实验环境:VS2010 + OpenCV2.4.9 一、对单独彩色图片...
  • ZYTTAE
  • ZYTTAE
  • 2014-12-29 10:14
  • 5557

【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并

这一章讲了如下内容: 1.图像对比度及亮度调整 2.图像通道的分离与合并 先上ppt: 代码1:图像对比度与亮度调整 ///图像对比度调整与亮度调整 #in...

OpenCV學習心得(6) -- 圖像的縮放

轉載請著名出處與作者 OpenCV提供了一個實現圖像縮放的函數:cv::resize void resize(InputArray src, OutputArray dst, Size dsize...

OpenCV学习笔记(2)之图像通道分离和RGB三通道直方图显示

要点: 1、读取一直彩色图片 2、从一副彩色图像中分离出R、G、B三个通道(cvSplit),并且显示 3.  分别对每个通道图像创建直方图,并显示 首先介绍一...
  • ts_zxc
  • ts_zxc
  • 2014-03-30 17:20
  • 1565

OpenCV学习笔记(三)分离颜色通道&多通道图像混合

为了更好的观察一些图像材料的特征,有时需要对RGB三个颜色通道的分量进行分别显示和调整。通过OpenCV的split和merge方法可以很方便的达到目的。分离颜色通道(一)split函数详解作用:将一...

opencv学习心得(四)——opencv提取截获图像

首先确定选区区域,这里利用鼠标选取区域具体操作看opencv学习心得(一)。 下面就是从感兴趣区域选取图像。 第一:创建图像空间,大小与rect相同。 第二:利用setroi选取区域。 第三:...

OpenCV 学习记录5 图像通道分离、对比度和亮度调整

记录了如何使用图像通道分离函数split、 以及一个图像对比度和亮度调整的小示例,涉及像素点访问和拖拉条的创建。

openCV学习笔记-颜色通道的分离和混合

颜色通道 保存图像颜色信息的通道称为颜色通道。RGB color有合成意义的变化(color channel),就是人有合成意义地(只用肢体或使用工具)将红蓝绿三种(实色料或颜色)合成出(一个或多个实...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)