【OpenCV】—分离颜色通道、多通道图像混合

简介: 【OpenCV】—分离颜色通道、多通道图像混合

补充:

上一个博客:我们主要介绍了如何使用addWeighted函数进行图像混合操作,以及如何将ROI和addWeighted函数结合起来,对指定区域进行图像混合操作。为了更好地观察一些图像材料的特征,需要对RGB三个颜色通道的分量进行分别显示和调整。

1、通道分离:split()函数

说明:split函数用于将一个多通道数组分离 成几个单通道数组。

split函数的C++版本有两个原型。分别是:

void split(const Mat& src,Mat*mvbegin);
void split(InputArray m,OutArrayOfArrays mv);
split(srcImage4, channels);
  • 3
  • 第一个参数:InputArray类型的m或者const Mat&类型的src,填写我们需要进行分离的多通道数组
  • 第二个参数:OutArrayOfArrays 类型mv,填函数的输出数组或者输出的vector容器

split函数分割多通道数组转换成独立的单通道数组,公式如下:

mv[c](I)=src(I)c

示例展示:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void main() {
  vector<Mat> channels;
  Mat imageBlueChannel;
  Mat imageGreenChannel;
  Mat imageRedChannel;
  Mat srcImage4 = imread("D:\\mogu.jpg");
  imshow("【原始图】", srcImage4);

  //把一个3通道图像转换成3个单通道图像
  split(srcImage4, channels);
  imageBlueChannel = channels.at(0);
  imageGreenChannel = channels.at(1);
  imageRedChannel = channels.at(2);

  //显示单通道图像
  imshow("【BlueChannel】", imageBlueChannel);
  imshow("【GreenChannel】", imageGreenChannel);
  imshow("【RedChannel】", imageRedChannel);

  waitKey(0);
}

原图

通道分离


2、通道合并:merge()函数

说明:merge()函数是split()函数的逆向操作—将多个数组合并成一个多通道的数组。它通过组合一些给定的单通道数组,将这些孤立的单通道数组合并成一个多通道的数组,从而创建出一个由多个单通道阵列组成的多通道阵列。

void merge(const Mat* mv,size_tcount,OutputArray dst);
void merge(InputArrayOfArrays mv,OutputArray dst)
    merge(channels, mergeImage);
  • 第一个参数:mv,需要合并的输入矩阵或vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度。
  • 第二个参数:count。当mv为一个空白的C数组时,代表输入矩阵的个数,这个参数显然必须大于1.
  • 第三个参数:dst,即输出矩阵,和mv[0]拥有一样的尺寸和深度,并且通道的数量是矩阵阵列中的通道的总数。

说明:下面的代码,先做相关的类型声明,然后把载入的3通道图像转换成3个单通道图像,放到vector类型的channels中,节奏进行引用赋值。其中,channels.at(0)表示引用取出chanels中的蓝色分量,channels.at(1)表示引用取出channels中的绿色分量,channels.at(2)表示引用取出channels中的红色分量。

vector<Mat> channels;
Mat imageBlueChannel;
Mat imageGreenChannel;
srcImage4=imread("dota.jpg");
//把一个3通道图像转换成3个单通道图像
split(srcImage4,channels);//分离色彩通道
imageBlueChannel=channels.at(0);
imageBlueChannel=channels.at(1);
imageBlueChannel=channels.at(2);
//对拆分的通道数据合并
Mat mergeImage;  //定义合并的输出矩阵
merge(channels, mergeImage);

相关文章
|
1天前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
6 1
|
1天前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
4 1
|
1天前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
11 0
|
1天前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
4 0
|
1天前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
3 0
|
1天前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
3 0
|
1天前
|
资源调度 算法 计算机视觉
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
6 0
|
1天前
|
算法 计算机视觉
【Qt&OpenCV 图像缩放resize()】
【Qt&OpenCV 图像缩放resize()】
5 0
|
6天前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
|
13天前
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
13 0