使用透明背景的图像之间的背景子结构

时间:2017-12-05 17:16:17

标签: c++ opencv

我正在尝试使用以下代码来区分两个图像:

Mat getWithoutBackground(Mat img, Mat back)
{
    _backgroundSubVal = 50;
    cv::Mat diff;
    cv::absdiff(img, back, diff);

    cv::Mat diff1Channel;
    cv::cvtColor(diff, diff1Channel, CV_BGRA2GRAY);

    cv::Mat mask = diff1Channel > _backgroundSubVal;

    cv::Mat data(img.size(), CV_8UC4, Scalar(255,255,255,0));

    // copy masked area
    img.copyTo(data, mask);
    cv::imwrite(""1.png", data);
    return similarRegions;
}

首先是背景: enter image description here

第二个是实际图像: enter image description here

结果如下: enter image description here

我几乎得到了正确的解决方案,但我希望有一个透明的背景而不是黑色。 (我不想删除所有图片的黑色) 我认为Scalar中的第4个参数应该已经完成​​了具有透明背景的技巧,但我想我错过了一些东西......

    cv::Mat data(img.size(), CV_8UC4, Scalar(255,255,255,0));

任何想法我做错了什么?

0 个答案:

没有答案