OpenCV——通道分离和合并

通道分离split 

void split(const Mat& src, Mat* mvbegin);
void split(InputArray m, OutputArrayOfArrays mv);
  • src:待分离的多通道图像。
  • mvbegin:分离后的单通道图像,为数组形式,数组大小需要与图像的通道数相同
  • m:待分离的多通道图像
  • mv:分离后的单通道图像,为向量vector形式
    该函数主要是用于将多通道的图像分离成若干单通道的图像,两个函数原型中不同之处在于前者第二个参数输入的是Mat类型的数组,其数组的长度需要与多通道图像的通道数相等并且提前定义;第二种函数原型的第二个参数输入的是一个vector容器,不需要知道多通道图像的通道数。

 通道合并

void merge(const Mat* mv, size_t count, OutputArray dst);
void merge(InputArrayOfArrays mv, OutputArray dst);
  • mv:需要合并的图像数组,其中每个图像必须拥有相同的尺寸和数据类型。
  • count:输入的图像数组的长度,其数值必须大于0.
  • mv:需要合并的图像向量vector,其中每个图像必须拥有相同的尺寸和数据类型。
  • dst:合并后输出的图像,与mv[0]具有相同的尺寸和数据类型,通道数等于所有输入图像的通道数总和。

 该函数主要是用于将多个图像合并成一个多通道图像,该函数也具有两种不同的函数原型,每一种函数原型都是与split()函数相对应

简单RGB图 分离 合并 示例

//
// Created by smallflyfly on 2021/6/9.
//

#include "opencv2/highgui.hpp"
#include "opencv2/opencv.hpp"

#include 

using namespace std;
using namespace cv;

int main() {

    Mat im = imread("test.jpg");

    cv::resize(im, im, Size(0, 0), 0.5, 0.5);

    Mat ims[3];
    cv::split(im, ims);

    imshow("bgr", im);
    imshow("b", ims[0]);
    imshow("g", ims[1]);
    imshow("r", ims[2]);

    Mat merge;
    cv::merge(ims, 3, merge);

    imshow("merge1", merge);

    Mat ims2[3];
    ims2[0] = ims[1];
    ims2[1] = ims[2];
    ims2[2] = ims[0];

    cv::merge(ims2, 3, merge);

    imshow("merge2", merge);

    waitKey(0);

    destroyAllWindows();
    
    return 0;

}

 

你可能感兴趣的:(Opencv,opencv,图像通道分离和合并)