我正在尝试使用以下代码生成透明PNG: 我原来的图像是"框架":
cv::Mat mask = cv::Mat::zeros(frame.size(), CV_8U);
cv::drawContours(mask, std::vector<std::vector<cv::Point>>{ maxAreaContour }, -1, cv::Scalar(255), CV_FILLED);
cv::Mat bframe = cv::Mat::zeros(frame.size(),CV_8UC4);
bframe=cv::Scalar(255,255,255,0);
frame.copyTo(bframe, mask);
cv::namedWindow("frg", 0);
cv::imshow("frg", bframe);
cv::namedWindow("mask", 0);
cv::imshow("mask", mask);
由于某种原因,我无法用透明背景保存原始图像,当显示为&#34; bframe&#34;时,我会保持黑色背景。图像输出 我在这里缺少什么想法?
答案 0 :(得分:1)
cv::imshow
剥离了alpha字母,因此你需要在显示之前混合图像。(即选择颜色或纹理来表示背景像素并将其与图像合并)
但如果您只需要保存它,只需将其保存为.png;顺便说一句,你可以为PNG设置压缩参数:
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9); //Compression level
try {
imwrite("bframe.png", bframe, compression_params);
}
catch (runtime_error& ex) {
fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
return 1;
}
价: https://docs.opencv.org/3.0-beta/modules/imgcodecs/doc/reading_and_writing_images.html