opencv学习日记——图像的分离与合并
#include<iostream>
#include<opencv2/opencv.hpp>
#include<vector>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("cat.jpg");
if (img.empty())
{
cout << "请输入正确图片名称";
return -1;
}
//保存新图像的矩阵
Mat imgs[3];
//保存图像各通道的矩阵
Mat imgs0, imgs1, imgs2;
//分离图像为三个通道
split(img, imgs);
//分别输出三个通道
imgs0 = imgs[0];
imgs1 = imgs[1];
imgs2 = imgs[2];
imshow("RGB_B: ", imgs0);
imshow("RGB_G: ", imgs1);
imshow("RGB_R: ", imgs2);
//把第二个通道变成三通道,然后合并,但是无法输出
//imshow最多输出三通道图像
// imgs[2] = img;
// Mat result0, result1;
// merge(imgs, 3, result0);
// imshow("result0", result0);
//定义一个图像大小的0矩阵
Mat zero = Mat::zeros(img.rows, img.cols, CV_8UC1);
//替换R B 通道内容,还原G通道的真实情况 为绿色
imgs[0] = zero;
imgs[2] = zero;
//合并三通道
merge(imgs, 3, result1);
imshow("result1", result1);
//以向量形式进行分离HSV
Mat HSV;
//将图像转化成HSV形式
cvtColor(img, HSV, COLOR_RGB2HSV);
vector<Mat> imgv;
Mat imgv0, imgv1, imgv2;
split(HSV, imgv);
imgv0 = imgv.at(0);
imgv1 = imgv.at(1);
imgv2 = imgv.at(2);
imshow("HSV_H; ", imgv0);
imshow("HSV_S: ", imgv1);
imshow("HSV_V: ", imgv2);
waitKey(0);
return 0;
}