使用CPP和OpenCV从蒙版创建透明PNG图像并输入图像

时间:2018-02-22 12:14:15

标签: c++ opencv

我正在尝试使用以下代码生成透明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);

Original Image

mask

由于某种原因,我无法用透明背景保存原始图像,当显示为&#34; bframe&#34;时,我会保持黑色背景。图像输出 我在这里缺少什么想法?

1 个答案:

答案 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