使用openCV查找和替换图像

时间:2013-10-02 11:56:31

标签: c++ c image opencv

我正在使用openCV编写一个代码,可以找到一个图像并用另一个图像替换

这是我的第一张图片enter image description here

现在我有第二张图片enter image description here

我需要用这个enter image description here

替换第二个图像

并且最终输出应该与此enter image description here

类似

那么如何开始呢?我不知道怎么能找到它,我尝试使用Template Matching但是图像应该完全相同,模板匹配,当我的图像以某种方式扭曲或倾斜时,它不起作用?< / p>

我如何匹配图像使用openCV获取边界,并替换为另一个图像? 任何帮助,将不胜感激 谢谢

2 个答案:

答案 0 :(得分:1)

SURF算法,这就是你想要的。 OPENCV SURF Example

答案 1 :(得分:0)

您可以使用此SURF Algorithm将图片匹配为show here

代码

line( img_scene , scene_corners[0] + Point2f( img_object .cols, 0), scene_corners[1] + Point2f( img_object .cols, 0), Scalar(0, 255, 0), 4 );

不会在场景图像上绘制图像,而是在对象上绘制图像,因此请使用此

line( img_scene , scene_corners[0], scene_corners[1] , Scalar(0, 255, 0), 4 );
line( img_scene , scene_corners[1] , scene_corners[2] , Scalar( 0, 255, 0), 4 );
line( img_scene , scene_corners[2] , scene_corners[3], Scalar( 0, 255, 0), 4 );
line( img_scene , scene_corners[3] , scene_corners[0], Scalar( 0, 255, 0), 4 );

现在替换图像使用此

Mat temp;
cv::resize(mReplacementImage,temp,img_object .size());
warpPerspective(temp, mReplacementImage, H, img_scene .size());
Mat mask = cv::Mat::ones(img_object .size(), CV_8U);
Mat temp2;
warpPerspective(mask, temp2, H, img_scene .size());
mReplacementImage.copyTo(img_scene , temp2);
cv::imwrite("output.bmp",img_scene );