使用C ++和OpenCV的图像比较方法

时间:2012-05-28 06:56:23

标签: c++ image-processing opencv image-comparison

我是 OpenCV 的新手。我想知道我们是否可以比较两个图像(由 photoshop 制作的图像之一,即源图像,另一个将从相机中拍摄)并查找它们是否相同。 我尝试使用模板匹配来比较图像。这是行不通的。你能告诉我我们可以用来进行这种比较的其他程序是什么吗?

2 个答案:

答案 0 :(得分:7)

图像的比较可以通过不同的方式进行,具体取决于您的目的:

  • 如果您只想比较两张图片是否大致相等(少数几张       亮度差异),但使用相同的透视和相机视图,您可以简单       计算每个色带的像素到像素的平方差。如果平方和超过       两个图像小于图像匹配的阈值,否则不是。
  • 如果一个图像是另一个图像的黑白变体,则转换彩色图像       需要(参见例如http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale)。 Afterwarts只需执行上述步骤。
  • 如果一个图像是另一个图像的子图像,则需要执行两者的注册       图片。这意味着确定尺度,可能的旋转和XY平移       在更大的图像上放置子图像是必要的(对于注册图像的方法,请参阅:       Pluim,J.P.W。,Maintz,J.B.A.,Viergever,M.A。,Mutual-information-based registration of       医学图像:一项调查,IEEE Transactions on Medical Imaging,2003,Volume 22,Issue 8,       pp.986 - 1004)
  • 如果您有透视差异,则需要一个算法来将一个图像校正到       尽可能地匹配另一个。对于做偏移的方法,例如在       第15页及以后的http://javaanpr.sourceforge.net/anpr.pdf
祝你好运!

答案 1 :(得分:4)

你应该试试SIFT。您将SIFT应用于您的标记(保存在内存中的图像),并获得一些描述符(可以识别的强健点)。然后,您可以将FAST算法与相机帧一起使用,以便在相机图像中找到标记的coprrespondent关键点。 你有很多关于这个主题的主题:

How to get a rectangle around the target object using the features extracted by SIFT in OpenCV

How to search the image for an object with SIFT and OpenCV?

OpenCV - Object matching using SURF descriptors and BruteForceMatcher

祝你好运