添加透明通道。
使用split(),merge(),合成图像通道。
把3通道的rgb转为4通道,设置alpha=0。并保存图像。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("E:/mypic/1.jpg");
vector<Mat> rgb3Channels(3);
split(src, rgb3Channels);
Mat zero_mat= Mat::zeros(Size(src.cols, src.rows), CV_8UC1);
Mat roi(zero_mat, Rect(100, 2, 1, 280)); // 证明alpha赋值为0的做法是正确有效的。
roi = Scalar(255, 255, 255);
vector<cv::Mat> channels_4;
channels_4.push_back(rgb3Channels[0]); //b
channels_4.push_back(rgb3Channels[1]); //g
channels_4.push_back(rgb3Channels[2]); //r
channels_4.push_back(zero_mat); //alpha=0
Mat img_alpha_0;
merge(channels_4, img_alpha_0);
//imwrite("img_alpha_01.png", img_alpha_0);
imshow("img_alpha_0", img_alpha_0);
waitKey(0);
return 0;
}
图像单通道彩色显示。
RGB其余的两通道赋值0即可。
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
cv::Mat src = imread("E:/mypic/group.jpg");
cv::imshow("src", src);
// Split the image into different channels
vector<cv::Mat> rgb3Channels(3);
split(src, rgb3Channels);
// Show individual channels
// 其余通道赋0
cv::Mat zero_mat;
zero_mat = cv::Mat::zeros(cv::Size(src.cols, src.rows), CV_8UC1);
cv::Mat one_img; // 三通道的单色图像 //
// Showing Blue Channel
vector<cv::Mat> channels_b;
channels_b.push_back(rgb3Channels[0]);
channels_b.push_back(zero_mat);
channels_b.push_back(zero_mat);
cv::merge(channels_b, one_img);
cv::imshow("B", one_img);
// Showing Green Channel
vector<cv::Mat> channels_g;
channels_g.push_back(zero_mat);
channels_g.push_back(rgb3Channels[1]);
channels_g.push_back(zero_mat);
cv::merge(channels_g, one_img);
cv::imshow("G", one_img);
// Showing Red Channel
// G and B channels are kept as zero matrix for visual perception
vector<cv::Mat> channels_r;
channels_r.push_back(zero_mat);
channels_r.push_back(zero_mat);
channels_r.push_back(rgb3Channels[2]);
cv::merge(channels_r, one_img);
cv::imshow("R", one_img);
// show rgb
cv::Mat rgb_img;
vector<cv::Mat> channels_rgb;
channels_rgb.push_back(rgb3Channels[0]); //b
channels_rgb.push_back(rgb3Channels[1]); //g
channels_rgb.push_back(rgb3Channels[2]); //r
cv::merge(channels_rgb, rgb_img);
cv::imshow("rgb", rgb_img);
cv::waitKey(0);
return 0;
}