簡體   English   中英

使用 CPP 和 OpenCV 從蒙版和輸入圖像創建透明 PNG 圖像

[英]Creating transparent PNG image from mask and input image using CPP and 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);

原圖

面具

由於某種原因,我無法保存具有透明背景的原始圖像,當顯示為“bframe”圖像輸出時,我一直得到黑色背景,我在這里缺少什么?

cv::imshow了 alpha chanel,所以你需要在顯示之前混合圖像。(即選擇顏色或紋理來表示背景像素並將其與你的圖像合並)

但是如果只需要保存的話,保存為.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM