今天呢,我们一起来学习彩色图像的颜色通道分离与多通道图像混合,一般情况下,我们大多数看到的图像都是基于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系列四 --- 颜色通道分离与多通道图像混合相关推荐

  1. 基于openCV3的颜色通道分离及多通道图像混合

    注:文档摘至<OpenCV3编程入门>毛星云版 <1>通道分离: split()函数 split函数用于将一个多通道数组分离成几个单通道数组.这里的array 按语境翻译为数组 ...

  2. 转载:【OpenCV入门教程之五】 分离颜色通道多通道图像混合

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  3. 【OpenCV入门教程之五】 分离颜色通道多通道图像混合(转)

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/21176257 作者:毛星云(浅墨) ...

  4. 【OpenCV C++】分离颜色通道多通道图像混合

    分离颜色通道&多通道图像混合 一.分离颜色通道 <1>split函数详解 <2>merge函数详解 二.多通道图像混合示例程序 本系列文章由@浅墨_毛星云 出品,转载请 ...

  5. 【OpenCV(C++)】分离颜色通道、多通道图像混合

    [OpenCV(C++)]分离颜色通道.多通道图像混合 通道分离:split()函数 通道合并:merge()函数 多通道图像混合实例 为了更好地观察一些图像材料的特征,需要对RGB三个颜色通道的分量 ...

  6. OpenCV学习笔记(三):多通道图像分离、混合算子:split(),merge()

    OpenCV学习笔记(三):多通道图像分离.混合算子:split(),merge() #include <opencv2/opencv.hpp>#define BRG_BLUE_CHANN ...

  7. pythpn实现bgr颜色通道分离,并分别显示一副彩色图片的BGR通道图片

    分别显示一副彩色图片的B,G,R通道图片 要实现这个功能,原理很简单. 一张彩图有三个颜色通道,显示哪个就将另外两个通道置0 代码 import cv2 as cv img = cv.imread(' ...

  8. OpenCV开发笔记(十):OpenCV图像颜色通道分离和图像颜色多通道混合

    若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101420314 各位读者,知识无穷而人力有穷, ...

  9. 【计算机视觉】EmguCV学习笔记(4)分离颜色通道以及多通道图像混合

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...

最新文章

  1. 完美解决tar文件window解压问题
  2. work1的code和问题
  3. 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
  4. boost::hana::detail::create用法的测试程序
  5. 【Linux】一步一步学Linux——halt命令(196)
  6. PAT_B_1011_Java(15分)
  7. 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、和运算符重载...
  8. python数据分析实况_Python数据分析实战:降雨量统计分析报告分析
  9. linux下安装yum步骤
  10. 我写了一份操作系统词典送给你!
  11. java 读书笔记_《java编程思想》读后感
  12. 计算机应用与基础教学计划,计算机应用基础教学计划完整版.docx
  13. (华为社招岗位,部门---上海海思,GTS,海思,2012,华为云):北京北京北京!
  14. 程序猿开启竖屏之路(竖屏的安装和使用)
  15. 一晚迎来十三年里最大单日涨幅,告别2021,中概股终于触底?
  16. 基于51单片机来开发的智能感应开盖垃圾桶
  17. 制作二维码怎么做?手把手教你制作生成二维码
  18. 微信会员php源码,美容院SPA会员管理系统(含微信端) v2.0
  19. Linux鸟哥的私房菜读后感(菜鸟的读后感)
  20. 远程执行命令的psexec工具的基本使用——简单、强大

热门文章

  1. 部署本地thinkphp6(iis+php7)
  2. 115网盘里的资源转存百度网盘
  3. 单片机_第6章 单片机的定时/计数器
  4. server2012搭建ftp服务器
  5. 计算机无法识别移动硬盘怎么办,笔记本识别不了移动硬盘如何解决_电脑无法识别移动硬盘的处理办法...
  6. 计算机与软件开发法则
  7. mysql mpp_MPP调研
  8. 帆软报表入门操作(一)
  9. 人工智能:智慧环保(上海AI智慧环保,绿色新时代)
  10. 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;