透明度通道,又叫alpha通道,做用于记录图像的透明度信息。具体参照【百度百科】“alpha通道”中的介绍。透明度确切的说应该叫不透明度(Opacity),取最小值0时,表示完全透明;取最大值255时,表示完全不透明;取值越大表示越不透明。通常遇到的图像如bmp图像、jpg图像都是单通道(灰度图)、RGB三通道(彩色)图像,而没有透明度通道,那么如何使用opencv给没有透明度通道的图像添加透明度,形成具有透明度通道(四通道)的图像呢。
这里封装了一个简单的函数,如下:
int addAlpha(cv::Mat& src, cv::Mat& dst, cv::Mat& alpha)
{
if (src.channels() == 4)
{
return -1;
}
else if (src.channels() == 1)
{
cv::cvtColor(src, src, cv::COLOR_GRAY2RGB);
}
dst = cv::Mat(src.rows, src.cols, CV_8UC4);
std::vector<cv::Mat> srcChannels;
std::vector<cv::Mat> dstChannels;
//分离通道
cv::split(src, srcChannels);
dstChannels.push_back(srcChannels[0]);
dstChannels.push_back(srcChannels[1]);
dstChannels.push_back(srcChannels[2]);
//添加透明度通道
dstChannels.push_back(alpha);
//合并通道
cv::merge(dstChannels, dst);
return 0;
}
另一个问题就是如何生成透明度