【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);

相关文章
|
2月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
583 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
3月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
56 4
|
5月前
|
计算机视觉 Python
opencv识别颜色
opencv识别颜色
|
3月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
4月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
4月前
|
计算机视觉 C++
基于VS2019和Opencv4,对hsv颜色空间的图像分割原理以及实现
这篇文章介绍了基于HSV颜色空间的图像分割原理,包括HSV模型的基本概念和如何在OpenCV中通过设置HSV的色彩范围来实现图像中特定颜色的物体分割,并通过示例代码展示了在静态图像和视频流中进行颜色分割的方法。
基于VS2019和Opencv4,对hsv颜色空间的图像分割原理以及实现
WK
|
4月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
133 1
|
5月前
|
算法 计算机视觉 索引
python---OpenCv(二),背景分离方法较有意思
python---OpenCv(二),背景分离方法较有意思
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
222 1
|
6月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
91 1

热门文章

最新文章