#include <opencv.hpp>
#include <iostream>
#include<vector>
void main()
{
//RGB通道分离与融合
cv::Mat dst,src, B, G, R;
src = cv::imread("C:/Users/Administrator/Desktop/test.png", cv::IMREAD_COLOR);
dst = src;
//BGR通道测试
cv::imshow("DST", dst);
//创建3个Mat矩阵
cv::Mat channels[3];
//创建三个Mat类型的向量
/* std::vector<cv::Mat> channels(3);*/
//创建替代矩阵
cv::Mat Zero = cv::Mat::zeros(cv::Size(dst.cols, dst.rows), CV_8UC1);//宽为列数,高为行数;
//通道分离
cv::split(dst, channels);
//创建3个Mat向量作为B通道融合向量
std::vector<cv::Mat> Bchannels(3);
Bchannels[0].push_back(channels[0]);
Bchannels[1].push_back(Zero);
Bchannels[2].push_back(Zero);
//通道融合
cv::merge(Bchannels, B);
cv::imshow("B", B);
//Mat向量与Mat矩阵在merge的时候传入的参数不同
cv::Mat Gchannels[3];
Gchannels[1].push_back(channels[1]);
Gchannels[0].push_back(Zero);
Gchannels[2].push_back(Zero);
cv::merge(Gchannels,3, G);
cv::imshow("G", G);
std::vector<cv::Mat> Rchannels(3);
Rchannels[2].push_back(channels[2]);
Rchannels[1].push_back(Zero);
Rchannels[0].push_back(Zero);
cv::merge(Rchannels, R);
//cv::namedWindow("R", cv::WINDOW_NORMAL); //WINDOW_NORMAL 显示图像后,允许用户随意调整窗口大小
/*cv::namedWindow("R",cv::WINDOW_AUTOSIZE);*/ //WINDOW_AUTOSIZE 根据图像大小显示窗口,不允许用户调整大小 /*cv::namedWindow("R", cv::WINDOW_FREERATIO);*/ //WINDOW_FREERATIO 窗口大小自适应比例
/*cv::namedWindow("R", cv::WINDOW_KEEPRATIO); //WINDOW_KEEPRATIO 保持图像的比例*/
cv::imshow("R", R);
//HSV通道分离
cv::Mat hsv,H,S,V;
cv::cvtColor(src, hsv, cv::COLOR_RGB2HSV/*_FULL*/);
imshow("HSV", hsv);
std::vector<cv::Mat> hsvchannels(3);
cv::split(hsv,hsvchannels);
imshow("V", hsvchannels[0]);
imshow("S", hsvchannels[1]);
imshow("H", hsvchannels[2]);
cv::waitKey(0);
}
OpenCV学习笔记05_通道分离与融合(RGB通道为例)
最新推荐文章于 2023-06-22 23:50:58 发布