如何使用 OpenCV 图像蒙版
How are OpenCV image masks used
如何使用 OpenCV 中的图像蒙版?根据我的理解,我正在正确使用它,但没有得到预期的结果。
我正在尝试合并两张图片。我从一个看起来像这样的结果垫(原始图像)开始:
然后我想在上面添加这张新图片:
为此,我创建了一个图像遮罩(类型为 8UC1
),如下所示:
然后我使用代码 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;
}
看起来 image2
和 result
的大小不匹配。
因此copyTo
函数将为result
矩阵分配一个新矩阵。 (基于image2
的大小)
如何使用 OpenCV 中的图像蒙版?根据我的理解,我正在正确使用它,但没有得到预期的结果。
我正在尝试合并两张图片。我从一个看起来像这样的结果垫(原始图像)开始:
然后我想在上面添加这张新图片:
为此,我创建了一个图像遮罩(类型为 8UC1
),如下所示:
然后我使用代码 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;
}
看起来 image2
和 result
的大小不匹配。
因此copyTo
函数将为result
矩阵分配一个新矩阵。 (基于image2
的大小)