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

use*_*108 10 c++ opencv image-comparison image-processing

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

小智 7

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

  • 如果您只是想比较两个图像是否大致相等(具有一些亮度差异),但是使用相同的透视和相机视图,您可以简单地计算每个色带的像素到像素的平方差.如果两个图像上的平方和小于阈值,则图像匹配,否则不匹配.
  • 如果一个图像是另一个图像的黑白变体,则需要转换彩色图像(参见例如http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale).Afterwarts只需执行上述步骤即可.
  • 如果一个图像是另一个图像的子图像,则需要执行两个图像的注册.这意味着确定将子图像放置在较大图像上所需的比例,可能的旋转和XY平移(对于注册图像的方法,请参阅:Pluim,JPW,Maintz,JBA,Viergever,MA,基于互信息的注册医学图像:一项调查,IEEE Transactions on Medical Imaging,2003,Volume 22,Issue 8,pp.986 - 1004)
  • 如果您有透视差异,则需要一种算法来纠正一个图像以尽可能地匹配另一个图像.有关进行偏斜校正的方法,请参阅 第15页及以后的http://javaanpr.sourceforge.net/anpr.pdf.

祝好运!


Jav*_*ock 4

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

如何在OpenCV中利用SIFT提取的特征得到目标物体周围的矩形

如何使用 SIFT 和 OpenCV 在图像中搜索目标?

OpenCV - 使用 SURF 描述符和 BruteForceMatcher 进行对象匹配

祝你好运

  • 当然可以。SIFT 检测“角点”,即那些在任何比例、任何角度、颠倒等情况下都很容易识别的点……我已经将它用于杂乱的图片,效果非常好。它是最先进的探测器,而且速度快。尝试一下吧。还有什么比草地上绿草如茵的图片更难察觉的呢。SIFT 没有遇到任何麻烦 (2认同)