【问题标题】:Find and replace image using openCV使用openCV查找和替换图像
【发布时间】:2013-10-08 19:14:20
【问题描述】:

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

这是我的第一张图片

现在我有第二张图片作为

我需要用这个替换第二张图片

最终输出应该是这样的

那么如何开始呢?我不确定如何找到它,我尝试使用Template Matching,但图像应该与模板匹配完全相同,当我的图像以某种方式扭曲或倾斜时,它就不起作用了?

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

【问题讨论】:

  • 模板匹配你传入什么?如果您想将雏菊粘贴到较大的图像上,那么在模板匹配中您应该通过带有红色花朵样本的大图像,这样它就可以告诉您它们在图片中的位置。然后你可以把雏菊贴在它们上面,知道它们在哪里。
  • 模板匹配不适用于倾斜的图像,所以我不想使用它,我需要更强大的解决方案

标签: c++ c image opencv


【解决方案1】:

您可以使用此SURF Algorithm 来匹配图像,如显示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 );

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 2011-09-15
      • 2014-09-01
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多