c++ - 如何使用 OpenCV 图像蒙版

标签 c++ opencv image-processing

如何使用 OpenCV 中的图像 mask ?根据我的理解,我正在正确使用它,但没有得到预期的结果。

我正在尝试合并两个图像。我从一个看起来像这样的结果垫(原始图像)开始:

enter image description here

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

enter image description here

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

enter image description here

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

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

合并图片的代码:

//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;
}

最佳答案

看起来 image2result 的大小不匹配。

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

reference

关于c++ - 如何使用 OpenCV 图像蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182786/

相关文章:

c++ - 数组/指针列表 C++

c++ - 如何将 C++ 函数指针作为带有一些固定值的参数传递?

c++ - 在opencv中聚类图像片段

c++ - 移动了QT项目,重命名了文件夹和项目名称,Moc'ing return “Missing value after ' -I'”

c++ - 带有 boost 线程库的 Cmake

python - cv2.imshow 和 numpy.dstack 核心转储

matlab - 如何裁剪图像中的多个对象 [MATLAB]

java - Canny 之后的对象提取

opencv - 使用单应性估计相机角度

debugging - 如何在 Visual C++ 中调试外部库 (OpenCV)?