OpenCV學習心得(5) -- 圖像通道分離
来源:互联网 发布:mac os sierra gm 编辑:程序博客网 时间:2024/05/21 21:39
轉載請注明出處與作者
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) -- 圖像通道分離
- OpenCV學習心得(6) -- 圖像的縮放
- opencv 三通道图像的分通道显示
- OpenCV學習心得
- OpenCV學習筆記(7)圖像的通道(channels)問題
- OpenCV分通道显示图片,灰度,融合,直方图,彩色直方图
- OpenCV學習心得(7) -- 閾值處理
- OpenCV學習心得(1) -- OpenCV的安裝
- OpenCV读取摄像头显示原图像和RGB三通道直方图
- OpenCV 深度和通道
- OpenCV分离图像通道
- opencv 通道分离合并
- OpenCV學習心得(3) -- 在MFC上顯示圖像
- OpenCV學習心得(4) -- 色彩空間的轉
- OpenCV學習心得(8) -- 直方圖的顯示
- OpenCV學習心得(11) -- Mat類型與Arraya
- OpenCV 单通道三通道理解
- opencv多通道图像转单通道
- 第五周C++作业 报告二。
- STL::for_each用法
- MySQL Binlog预分配的实现和性能
- 对象背后的那只看不见的手——软件世界的有神论
- Java关键字final、static使用总结
- OpenCV學習心得(5) -- 圖像通道分離
- AS3 没有2D向量类,自己随手写个简化版的先用着
- 《Computer Networks (fifth edition)》第五章学习小结
- Javascript 设计模式学习笔记(2) - 继承(Inheritance) (下)
- jquery学习(三)--下拉左右选择菜单
- 项目打包前清除 SVN 标记
- 数据驱动设计
- 抽象类,接口简介
- HDU 1796 How many integers can you find 容斥原理