【OpenCV(C++)】分离颜色通道、多通道图像混合
为了更好地观察一些图像材料的特征,需要对RGB三个颜色通道的分量进行分别显示和调整。通过OpenCV的split和merge方法可以很方便地达到目的。
通道分离:split()函数
split函数用于将一个多通道数组分离成几个单通道数组,公式如下:
通道合并:merge()函数
merge()函数是split()函数的逆向操作——将多个数组合并成一个多通道的数组。它通过组合一些给定的但通道数组,将这些孤立的单通道数组合并成一个多通道的数组,从而创建出一个由多个单通道阵列组成的多通道阵列。
多通道图像混合实例
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat srcImage;
Mat logoImage;
vector<Mat> channels;
Mat imageBlueChannel;
//多通道混合-红色分量部分
Mat imageRedChannel;
logoImage = imread("pig.jpg", 0);
srcImage = imread("2.jpg");
if (!logoImage.data) { printf("Oh,no,读取logoImage错误~! \n"); return false; }
if (!srcImage.data) { printf("Oh,no,读取srcImage错误~! \n"); return false; }
split(srcImage, channels);//分离色彩通道
imageRedChannel = channels.at(2);
addWeighted(imageRedChannel(Rect(500, 250, logoImage.cols, logoImage.rows)), 1.0,
logoImage, 0.5, 0., imageRedChannel(Rect(500, 250, logoImage.cols, logoImage.rows)));
//将三个独立的单通道重新合并成一个三通道
merge(channels, srcImage);
namedWindow("原画+pig红色通道 ");
imshow("原画+pig红色通道 ", srcImage);
waitKey(0);
return 0;
}
运行效果如下: