Qt-OpenCV学习笔记--基本函数操作--cv::merge(图像通道合并)

概述

在图像处理中,有时需要对各个通道进行分离,分别处理。
在OpenCV中,cv::split()用于实现图像通道的分离。

而cv::merge()用于实现图像通道的合并,是split的逆向操作。

函数

void merge
(
	vector mv, 
	OutputArray dst 
)
  • mv 是vector容器,装载不同通道的图像信息。
  • dst 输出的图像。

测试代码

#include "widget.h"
#include "ui_widget.h"

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

#include <vector>

using namespace cv;
using namespace std;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //载入图片
    cv::Mat src = imread("c:/opencv/666.jpg");
    imshow("src",src);

    //分离
    vector<Mat> channels;
    cv::split(src,channels);

    //接收
    cv::Mat channel_red = channels.at(2);
    cv::Mat channel_green = channels.at(1);
    cv::Mat channel_blue = channels.at(0);

    //显示
    imshow("channel_red",channel_red);
    imshow("channel_green",channel_green);
    imshow("channel_blue",channel_blue);

    //建立一个空白通道
    cv::Size size(src.cols,src.rows);
    cv::Mat mat0 = cv::Mat::zeros(size,CV_8UC1);

    //合并R通道
    vector<Mat> ch_r;
    ch_r.push_back(mat0);
    ch_r.push_back(mat0);
    ch_r.push_back(channel_red);
    cv::Mat mat_red;
    cv::merge(ch_r,mat_red);
    imshow("mat_red",mat_red);

    //合并G通道
    vector<Mat> ch_g;
    ch_g.push_back(mat0);
    ch_g.push_back(channel_green);
    ch_g.push_back(mat0);
    cv::Mat mat_green;
    cv::merge(ch_g,mat_green);
    imshow("mat_green",mat_green);

    //合并B通道
    vector<Mat> ch_b;
    ch_b.push_back(channel_blue);
    ch_b.push_back(mat0);
    ch_b.push_back(mat0);
    cv::Mat mat_blue;
    cv::merge(ch_b,mat_blue);
    imshow("mat_blue",mat_blue);


}

Widget::~Widget()
{
    delete ui;
}

测试结果

参考

【OpenCV3】图像通道分离与合并——cv::split()与cv::merge()详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值