如何使用OpenCV图像蒙版

时间:2015-03-21 12:36:46

标签: c++ opencv image-processing

OpenCV中的图像蒙版是如何使用的?从我的理解,我正确使用它,但没有得到预期的结果。

我正在尝试合并两张图片。我从结果Mat(原始图像)开始,看起来像这样:

enter image description here

然后我想在最上面添加这个新图片:

enter image description here

为此,我创建了一个图像蒙版(类型为8UC1),如下所示:

enter image description here

然后我使用代码image2.copyTo(result, mask);将新图像复制到结果上。在代码中,image2是新图像,结果是原始图像。

问题是最终结果只是新图像,而不是原始图像顶部的新图像。

合并图像的代码:

//referenceImg is copied into the original image, 
referenceImg.copyTo(result);
cv::Mat mask = createMask(h, image2);

imshow("Result image before", result);

//Translate the image
//Before this image2 is a regular image loaded from disk 
cv::warpPerspective(image2, image2, h,
                        cv::Size(referenceImg.cols+image2.cols, referenceImg.rows*2), cv::INTER_CUBIC);


image2.copyTo(result, mask);
std::cout << mask.type() << std::endl; //Returns 0
imshow("Result", result);

cv::waitKey(0);

createMask方法代码:

cv::Mat App::createMask(cv::Mat homography, cv::Mat image)
{
    cv::Mat grayImage;
    image.copyTo(grayImage);
    grayImage.setTo(cv::Scalar(255, 255, 255));
    cv::cvtColor(grayImage, grayImage, CV_BGR2GRAY);

    cv::Mat mask;
    cv::warpPerspective(grayImage, mask, homography, cv::Size(image.cols*2, image.rows*2), cv::INTER_CUBIC);

    return mask;
}

1 个答案:

答案 0 :(得分:1)

看起来image2result的尺寸不匹配。

因此copyTo函数将为result矩阵分配一个新矩阵。 (基于image2)的大小

reference