OpenCV系列四 --- 颜色通道分离与多通道图像混合
今天呢,我们一起来学习彩色图像的颜色通道分离与多通道图像混合,一般情况下,我们大多数看到的图像都是基于RGB颜色通道的图像,因此要实现颜色通道的分离,即要将R、G、B三个通道分离,而多通道图像混合,即将R、G、B三个通道的图像进行混合起来,重新组成一幅彩色图像。
实现的话,我们可以通过OpenCV的split函数与merge函数可以很方便的达到目的。
接下来我们正式进入颜色通道分离与多通道图像混合的内容
一、颜色通道的分离与合并
1、split()函数
功能:将一个多通道的数组分离成几个单通道的数组。
函数原型:
void split(const Mat& src, Mat*mvbegin);
void split(InputArray m,OutputArrayOfArrays mv);
第一个参数,InputArray类型的m或者const Mat&类型的src,填我们需要进行分离的多通道数组。
第二个参数,OutputArrayOfArrays类型的mv,填函数的输出数组或者输出的vector容器。
split函数分割多通道数组转换成独立的单通道数组,按公式来看就是这样:
分离彩色图像的实例:
#include <opencv2/opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;int main()
{Mat srcImage = imread("lena.png",IMREAD_COLOR);if (srcImage.empty()){printf("image error!\n");return 0;}std::vector<Mat> channels;Mat aChannels[3];//利用数组分离split(srcImage, aChannels);//利用vector对象分离split(srcImage, channels); // 显示原图namedWindow("src");imshow("src", srcImage);namedWindow("B");namedWindow("G");namedWindow("R");imshow("B", aChannels[0]);imshow("G", aChannels[1]);imshow("R", aChannels[2]);waitKey(0);return 0;
}
原图
分离通道的三个图
2、merge()函数
功能:merge()函数的功能是split()函数的逆向操作,将多个数组组合合并成一个多通道的数组。
函数原型:
void merge(const Mat* mv, size_tcount, OutputArray dst)
void merge(InputArrayOfArrays mv,OutputArray dst)
第一个参数,mv,填需要被合并的输入矩阵或vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度。
第二个参数,count,当mv为一个空白的C数组时,代表输入矩阵的个数,这个参数显然必须大于1.
第三个参数,dst,即输出矩阵,和mv[0]拥有一样的尺寸和深度,并且通道的数量是矩阵阵列中的通道的总数。
图像通道的分离与合并的实例:
#include <opencv2/opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;// 图像通道的分离与合并
///@srcImage const Mat 原始图像
///@logoImage const Mat 融合图像
///@outputImage Mat 输出图像
///@splitChannel int 图像的某个通道(0--2)
void SplitMerge(const Mat &srcImage, const Mat &logoImage, Mat &outputImage, int splitChannel)
{vector<Mat>channels;//把一个3通道图像转换成3个单通道图像//分离色彩通道split(srcImage, channels);// 得到其中一个通道的图像Mat ChannelImage = channels.at(splitChannel);//将原图的蓝色通道的(50,50)坐标处// 右下方的一块区域和logo图进行加权操作,// 将得到的混合结果存到imageBlueChannel中addWeighted(ChannelImage(Rect(50, 50, logoImage.cols, logoImage.rows)), 1.0,logoImage, 0.9, 0, ChannelImage(Rect(50, 50, logoImage.cols, logoImage.rows)));// 将三个单通道重新合并成一个三通道merge(channels, outputImage);
}int main()
{//【0】定义相关变量Mat srcImage;Mat logoImage;//读入图片logoImage = imread("2.png", 0);srcImage = imread("lena.png");if (!logoImage.data) { printf("image error!\n"); return false; }if (!srcImage.data) { printf("image error!\n"); return false; }Mat outputImage1, outputImage2, outputImage3;SplitMerge(srcImage, logoImage, outputImage1, 0);// 显示效果图namedWindow("B");imshow("B", outputImage1);SplitMerge(srcImage, logoImage, outputImage2, 1);// 显示效果图namedWindow("G");imshow("G", outputImage2);SplitMerge(srcImage, logoImage, outputImage3, 2);// 显示效果图namedWindow("R");imshow("R", outputImage3);waitKey(0);return 0;
}
运行结果:
图像通道的分离与合并
好了,今天的学习到这里就结束了,喜欢的朋友给我点歌赞哦!!!
OpenCV系列四 --- 颜色通道分离与多通道图像混合相关推荐
- 基于openCV3的颜色通道分离及多通道图像混合
注:文档摘至<OpenCV3编程入门>毛星云版 <1>通道分离: split()函数 split函数用于将一个多通道数组分离成几个单通道数组.这里的array 按语境翻译为数组 ...
- 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...
- 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...
- 【OpenCV C++】分离颜色通道多通道图像混合
分离颜色通道&多通道图像混合 一.分离颜色通道 <1>split函数详解 <2>merge函数详解 二.多通道图像混合示例程序 本系列文章由@浅墨_毛星云 出品,转载请 ...
- 【OpenCV(C++)】分离颜色通道、多通道图像混合
[OpenCV(C++)]分离颜色通道.多通道图像混合 通道分离:split()函数 通道合并:merge()函数 多通道图像混合实例 为了更好地观察一些图像材料的特征,需要对RGB三个颜色通道的分量 ...
- OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()
OpenCV学习笔记(三):多通道图像分离.混合算子:split(),merge() #include <opencv2/opencv.hpp>#define BRG_BLUE_CHANN ...
- pythpn实现bgr颜色通道分离,并分别显示一副彩色图片的BGR通道图片
分别显示一副彩色图片的B,G,R通道图片 要实现这个功能,原理很简单. 一张彩图有三个颜色通道,显示哪个就将另外两个通道置0 代码 import cv2 as cv img = cv.imread(' ...
- OpenCV开发笔记(十):OpenCV图像颜色通道分离和图像颜色多通道混合
若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101420314 各位读者,知识无穷而人力有穷, ...
- 【计算机视觉】EmguCV学习笔记(4)分离颜色通道以及多通道图像混合
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...
最新文章
- 完美解决tar文件window解压问题
- work1的code和问题
- 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
- boost::hana::detail::create用法的测试程序
- 【Linux】一步一步学Linux——halt命令(196)
- PAT_B_1011_Java(15分)
- 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、和运算符重载...
- python数据分析实况_Python数据分析实战:降雨量统计分析报告分析
- linux下安装yum步骤
- 我写了一份操作系统词典送给你!
- java 读书笔记_《java编程思想》读后感
- 计算机应用与基础教学计划,计算机应用基础教学计划完整版.docx
- (华为社招岗位,部门---上海海思,GTS,海思,2012,华为云):北京北京北京!
- 程序猿开启竖屏之路(竖屏的安装和使用)
- 一晚迎来十三年里最大单日涨幅,告别2021,中概股终于触底?
- 基于51单片机来开发的智能感应开盖垃圾桶
- 制作二维码怎么做?手把手教你制作生成二维码
- 微信会员php源码,美容院SPA会员管理系统(含微信端) v2.0
- Linux鸟哥的私房菜读后感(菜鸟的读后感)
- 远程执行命令的psexec工具的基本使用——简单、强大
热门文章
- 部署本地thinkphp6(iis+php7)
- 115网盘里的资源转存百度网盘
- 单片机_第6章 单片机的定时/计数器
- server2012搭建ftp服务器
- 计算机无法识别移动硬盘怎么办,笔记本识别不了移动硬盘如何解决_电脑无法识别移动硬盘的处理办法...
- 计算机与软件开发法则
- mysql mpp_MPP调研
- 帆软报表入门操作(一)
- 人工智能:智慧环保(上海AI智慧环保,绿色新时代)
- 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;