我正在使用openCV编写一个代码,可以找到一个图像并用另一个图像替换
这是我的第一张图片
现在我有第二张图片
我需要用这个
替换第二个图像并且最终输出应该与此
类似那么如何开始呢?我不知道怎么能找到它,我尝试使用Template Matching但是图像应该完全相同,模板匹配,当我的图像以某种方式扭曲或倾斜时,它不起作用?< / p>
我如何匹配图像使用openCV获取边界,并替换为另一个图像? 任何帮助,将不胜感激 谢谢
答案 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 );