opencv常用api简单分析: split()merge()
Posted arvik
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv常用api简单分析: split()merge()相关的知识,希望对你有一定的参考价值。
原型
split()和merge()方法是一对互逆操作,split()是对图像进行通道分离,merge()是进行通道合并,
灰度图像只有1个通道,一般RGB能分离出3个通道,RGBA图像能分理出4个通道(如.png格式图片)
void split(const Mat& src, Mat* mvbegin)
void split(InputArray m, OutputArrayOfArrays mv)
void merge(const Mat* mv, size_t count, OutputArray dst)
void merge(InputArrayOfArrays mv, OutputArray dst)
参数:
count
要合并的通道数
剩余参数都是cv::Mat类型
关系图
下图描绘了一个一般的RGB图像在opencv的Mat中像素数据存储结构以及通道分离/合并操作关系
例子
以下例子演示了怎么从一个原图像中分离出b通道,然后再和另外两个数据为0的通道合成一个新图像,以此显示出blue颜色的图像。同理可以提取并显示出g、r通道
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include"opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
cv::Mat src = imread("test3.jpg");
cv::imshow("src", src);
vector<Mat> channels;
Mat channels_m[3];
cv::Mat dst;
split(src, channels); //分离色彩通道,0,1,2
channels_m[0] = channels[0]; // b
channels[1] = 0;
channels[2] = 0;
merge(channels, dst);
cv::imshow("b", dst);
split(src, channels);
channels_m[1] = channels[0]; // g
channels[0] = 0;
channels[2] = 0;
merge(channels, dst);
cv::imshow("g", dst);
split(src, channels);
channels_m[2] = channels[0]; // r
channels[0] = 0;
channels[1] = 0;
merge(channels, dst);
cv::imshow("r", dst);
cv::waitKey();
return 0;
效果图
以上是关于opencv常用api简单分析: split()merge()的主要内容,如果未能解决你的问题,请参考以下文章
opencv常用api简单分析:几个基本绘图操作(LineRectangleCircleEllipse...)
opencv常用api简单分析:几个基本绘图操作(LineRectangleCircleEllipse...)