参考地址:https://blog.csdn.net/guduruyu/article/details/80184
以下为我的代码 仅仅是为了记录
cv::Mathecheng::createAlpha(cv::Mat& src)
{
cv::Mat alpha = cv::Mat::zeros(src.rows, src.cols, CV_8UC1);
cv::Mat gray = cv::Mat::zeros(src.rows, src.cols, CV_8UC1);
cv::cvtColor(src, gray, cv::COLOR_RGB2GRAY);
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
uchar d = gray.at<uchar>(i, j);
alpha.at<uchar>(i, j) = 255;
//alpha.at<uchar>(i, j) = 255 - d;
}
}
return alpha;
}
inthecheng::addAlpha(cv::Mat& src, cv::Mat& dst, cv::Mat& alpha)
{
if (src.channels() == 4)
{
return -1;
}
elseif (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;
}