1、多通道图像的分离
cv::split()的具体调用方法如下:
2、图像多个通道的合并
cv::merge()的具体调用方法如下:
const vector<cv::Mat>& mv,
可能有人会问为什么分离出的通道都是黑白灰,而不是红绿蓝。原因是分离后为单通道,相当于分离通道的同时把其他两个通道填充了相同的数值。比如红色通道,分离出红色通道的同时,绿色和蓝色被填充为和红色相同的数值,这样一来就只有黑白灰了。那么红色体现在哪呢?可以进行观察,会发现原图中颜色越接近红色的地方在红色通道越接近白色。
在纯红的地方在红色通道会出现纯白。
R值为255 -》RGB(255,255,255),为纯白
以下代码是将分理后的通道,将其余两个通道置零,合并
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat srclmage;
Mat imageROI;
vector<Mat> channels(3);
srclmage = cv::imread("F:\\数据集\\数字图像处理标准测试图\\结果图-at.jpg",1);
split(srclmage, channels);
// Show individual channels
cv::Mat blank_ch, fin_img;
blank_ch = cv::Mat::zeros(cv::Size(srclmage.cols, srclmage.rows), CV_8UC1);
// Showing Red Channel
// G and B channels are kept as zero matrix for visual perception
std::vector<cv::Mat> channels_r;
channels_r.push_back(blank_ch);
channels_r.push_back(blank_ch);
channels_r.push_back(channels[2]);
/// Merge the three channels
cv::merge(channels_r, fin_img);
cv::imshow("R", fin_img);
// Showing Green Channel
std::vector<cv::Mat> channels_g;
channels_g.push_back(blank_ch);
channels_g.push_back(channels[1]);
channels_g.push_back(blank_ch);
cv::merge(channels_g, fin_img);
cv::imshow("G", fin_img);
// Showing Blue Channel
std::vector<cv::Mat> channels_b;
channels_b.push_back(channels[0]);
channels_b.push_back(blank_ch);
channels_b.push_back(blank_ch);
cv::merge(channels_b, fin_img);
cv::imshow("B", fin_img);
cv::waitKey(0);
return 0;
}
1
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。