【学习OpenCV4】图像通道的分离、合并与混合方法(C++)_Half_A的博客-程序员秘密_opencv 通道组合

技术标签: c++  # OpenCV  图像处理  程序设计  opencv  

一、图像通道的分离

void split(
	const cv::Mat& image, //输入图像
	vector<Mat>& mv // 输出的多通道序列(n个单通道序列)
);

  输出的多通道序列一般使用 std::vector<Mat> mv; 来存储,mv[0]mv[1]mv[2]、分别对应BGR三个通道。
  
  示例代码:

void MyDemo::channels_Demo(Mat& image) {
    
	std::vector<Mat> mv;
	split(image, mv);
	imshow("Blue Channel", mv[0]);
	imshow("Green Channel", mv[1]);
	imshow("Red Channel", mv[2]);
}

二、通道的合并

  但是现在显示的相当于是三张单通道的图像,也就相当于三张灰度图像。要想让三张图像恢复直观意义上的色彩,就需要使用下面通道合并的方法了。

  通道的合并需要用到 merge() 函数。

void merge(
	const vector<cv::Mat>& mv, // 输入的多通道序列(n个单通道序列)
	cv::OutputArray dst // 输出图像,包含mv
);

  根据 merge() 函数的定义,我们只需要控制输入的多通道数组 mv[] 中的三个值,就可以实现通道的合并。

  示例代码:

void MyDemo::channels_Demo(Mat& image) {
    
	std::vector<Mat> mv;
	split(image, mv);
	
	Mat m1,m2,m3;
	mv[1] = 0;
	mv[2] = 0;
	merge(mv, m1);
	imshow("Blue Channel", m1);

	split(image, mv);
	mv[0] = 0;
	mv[2] = 0;
	merge(mv, m2);
	imshow("Green Channel", m2);

	split(image, mv);
	mv[0] = 0;
	mv[1] = 0;
	merge(mv, m3);
	imshow("Red Channel", m3);
}

  我们已经知道如何将图像的三个通道提取出来了,因此我们可以将三个通道进行任意组合,合并出我们想要的图片。

三、通道的混合

  通道的混合也是将三个通道进行任意排列

C++: void mixChannels(const Mat*src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs)
参数 作用
src 输入矩阵
nsrcs 输入矩阵的个数
dst 输出矩阵
ndsts 输出矩阵的个数
fromTo 序号对向量
void MyDemo::channels_Demo(Mat& image) {
    
	Mat dst = Mat::zeros(image.size(), image.type());
	int ft[] = {
     0,2,1,1,2,0 };//互换1、3通道
	mixChannels(&image,1, &dst,1, ft,3);
	imshow("Mix", dst);
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44543463/article/details/118931818

智能推荐

Velocity java开发指南_iteye_8877的博客-程序员秘密

目 录1.开始入门. 31.Getting Started32.Dependencies 依赖资源. 32.参考资源:. 43.它是如何工作的?. 41.基本使用模式. 44.单实例还是多实例(To Singleton Or Not To Singleton...)?61.Singleton Model62.Separate Instance65. The Context71.The Basics...

链路层和局域网:多点访问协议_蜗壳er的博客-程序员秘密_多点访问协议

一、导论:两种网络链路:点对点链路和广播链路*点对点链路:*由链路一端的多个发送方和链路另一端的单个接收方组成。许多链路层协议都是为点对点链路设计的,如点对点协议(PPP)、高级数据链路控制(HDLC)*广播链路:*它能够让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上。 ( 共享线路或媒体 )如:传统以太网、 HFC 上行链路、802.11 无线局域网研究一个对链路层很重要的问题:如何协调多个发送和接收节点对一个共享广播信道的访问,这就是多路访问问题**多路访问协议:**节点通过

Ubuntu下打开.docx文件的笨方法(先另存为成.doc)_恒宝乐园的博客-程序员秘密_ubuntu打开doc文件

首先,能不让别人传给你.docx文件就不让,这个很难弄,最好是让他另存为成.doc文件然后再发给你。我的方法也是另存为成.doc文件再打开。方法很简单,如果是移动端可以接收的文件,可以先用WPS打开,另存为成.doc文件(记得新建一个存储这类文件的目录方便自己找到)。上传该文件到云盘里(360云盘、百度云盘、微云),在ubuntu环境下打开浏览器访问云盘的网页版,下载查看即可。如果有条件,最好是找一

python基础知识总结_zhz199879的博客-程序员秘密

1.python变量          1.1特点:          无需事先声明变量名及类型,直接赋值即可创建各种类型的变量。          python变量的类型可以随时变化。        python采用基于值得内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。          1.2变量名          变量名必须以字母或下划线开头...

oracle学习笔记__需要注意的点_2019-07017_OnMyOwn°的博客-程序员秘密

1.设计表四个必须的字段:主键、创建人、创建日期、备注2.修改数据,select * from emp for update 或使用rowid字段 需解锁,修改,关锁,提交3.where后条件数据的大小写格式应与表中的数据一致4.union与union all 区别:前者去重组合查询,后者非去重组合5.求差集:minus6.求交集:intersect7.查询工资最高的第2-5条记录...

err_cleartext_not_permitted_Farmwang的博客-程序员秘密

&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.kazhusu"&gt; &lt;uses-sdk android:minSdkVersion="21"...

随便推点

creo显示agent未初始化_Creo View 3.1 M010: Windchill 11.0 M010 及之后版本如何不使用浏览器插件加载 Creo View 软件?..._weixin_39673293的博客-程序员秘密

Creo View 3.1 M010: Windchill 11.0 M010 及之后版本如何不使用浏览器插件加载 Creo View 软件?2018-01-03浏览次数:1782Creo View 新的加载机制:Creo View 3.1 M010 及以后版本安装时,会自动安装Creo View Agent(bin\pvagent.exe)和传统 Creo View 插件注册 (pview.oc...

React这25个精选库,将助你工作更上一层楼_徐小夕@趣谈前端的博客-程序员秘密

大厂技术坚持周更精选好文推荐实战: React实战——从零搭建一款轻量级个人OA系统日常工作中,除了我们掌握的基本技能和各类优秀代码库之外,还需在自己的背包中增添一些常用的工具,以备不时之需,同时也可以提升工作效率。本文将为大家带来 25个React 优秀的代码库,希望能对大家在工作上提供一定的帮助。1. React Hot Toasthttps://react-...

Spring 与组件注入相关的注解之 @ComponentScans/@ComponentScan/@Controller/@Service/@Repository/@Component_小邪2019的博客-程序员秘密

前言:通过上一个demo,应该能初步体会到spring 基于注解的开发流程。那下面介绍几个新的与组件注入相关的注解:@ComponentScans/@ComponentScan/@Controller/@Service/@Repository准备工作:新建 controller、service、dao三个package,并在其中分别定义三个类:如 UserController、UserSer...

Win7电池电量设置_Breeze_yk的博客-程序员秘密

保留电池电量,达到保留电池电量时,系统会跳出一个警告框,提示尽快插入电源,否则要休眠之类的,电池变红色,左下角有个红叉叉,除了这个没有其他操作关键电池电量水平 这个跟 关键级别电池操作相关,其实关键电池电量水平就是电量严重不足的意思,如果电量达到关键水平 就会触发关键级别电池操作里的设置正确的设置应该是保留电量&gt;关键电量建议水平低时设置不采取任何操作,并且低水平电池电量通知打开,关键水平设置休眠或关机值就看自己情况设定,推荐最低=15,保留=10,关键=7或者按操作系统原设置保持不变。还有就是

可以让你少奋斗十年的工作经验_amj0622的博客-程序员秘密

转帖网址:http://blog.21ic.com/user1/5872/archives/2009/62334.html第一:不要认为停留在心灵的舒适区域内是可以原谅的。      每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没

如何提高网页的效率(上篇)——提高网页效率的14条准则_iteye_4392的博客-程序员秘密

图:你的网页太臃肿了!网站最基本的东西是什么?网站最基本的东西是什么?——内容?SEO(搜索引擎优化)?UE(用户体验)?都不对!是速度!内容再丰富的网站,如果慢到无法访问也是毫无意义的; SEO做的再好的网站,如果搜索蜘蛛抓不到也是白搭; UE设计的再人性化的网站,如果用户连看都看不到也是空谈。所以网页的效率绝对是最值得关注的方面。如何才能提高一个网页的效率呢?Stev...

推荐文章

热门文章

相关标签