opencv之split、merge、mixChannels

1 split

函数功能

split()将多通道图像划分成B、G、R三通道。

参数解释

void split(InputArray _m, OutputArrayOfArrays _mv)
_m: 多通道图像
_mv: 输出向量, 包含多通道的Mat

2 merge

函数功能

merge()将多个单通道图像合成一个多通道图像。

参数解释

void merge(InputArrayOfArrays _mv, OutputArray _dst)
_mv: 输入向量, 包含多通道的Mat
_dst: 输出的多通道图像

3 mixChannels

函数功能

mixChannels()是opencv处理图像通道的一个函数,能够实现复杂的通道组合。

参数解释

void cv::mixChannels( const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs )
src: 输入矩阵或向量
nsrcs: 输入矩阵数量
dst: 输出矩阵或向量
ndsts: 输出矩阵数量
fromTo: 列表, 由被复制的通道位置与要复制到的通道位置组成的索引对
npairs: 索引对的数量(要处理的通道数)

4 代码示例

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;


class QuickDemo
{
    public:
        void channels_demo(Mat &image);
};


void QuickDemo::channels_demo(Mat &image)
{    
    imshow("input image", image);

    vector<Mat>mv;

    // 通道分离
    split(image, mv);

    // 0、1、2三个通道分别代表BGR
    imshow("blue", mv[0]);
    imshow("green", mv[1]);
    imshow("red", mv[2]);

    Mat dst;
    // 通道0、2的像素置零
    mv[0] = 0;
    mv[2] = 0;

    // 通道混合
    merge(mv, dst);
    imshow("channel mix", dst);
    
    // 通道交换,0->2,1->1,2->0
    int from_to[] = {0, 2, 1, 1, 2, 0};
    // param1: 输入矩阵或向量; param2: 输入矩阵数量; param3: 输出矩阵或向量; param4: 输出矩阵数量;
    // param5: 由被复制的通道位置与要复制到的通道位置组成的索引对; param6: 索引对的数量(要处理的通道数)
    mixChannels(&image, 1, &dst, 1, from_to, 3);
    imshow("channel switch", dst);
}


int main()
{
    Mat image = imread("D:\\c++_opencv\\images\\0--Parade_0_Parade_marchingband_1_20.jpg", IMREAD_ANYCOLOR);

    if (image.empty())
    {
        printf("could not load image");
        return -1;
    }

    QuickDemo qd;

    qd.channels_demo(image);

    waitKey(0);
    destroyAllWindows();

    return 0;
}

5 结果展示

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen_znn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值