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

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