小编典典

使用 OpenCV 检查图像的相似性

all

OpenCV 是否支持比较两个图像,返回一些值(可能是百分比)来指示这些图像的相似程度?例如,如果相同的图像通过两次,则返回
100%,如果图像完全不同,则返回 0%。

我已经在上阅读了很多类似的主题。我也做了一些谷歌搜索。遗憾的是,我无法给出令人满意的答案。


阅读 70

收藏
2022-08-05

共1个答案

小编典典

这是一个巨大的话题,从 3 行代码到整个研究杂志都有答案。

我将概述最常见的此类技术及其结果。

比较直方图

最简单和最快的方法之一。几十年前提出的一种寻找图片相似性的方法。这个想法是森林会有很多绿色,人脸会有很多粉红色,或者其他什么。因此,如果您将两张图片与森林进行比较,您会发现直方图之间有些相似之处,因为两者都有很多绿色。

缺点:太简单了。香蕉和海滩看起来一样,因为它们都是黄色的。

OpenCV 方法:compareHist()

模板匹配

这里有一个很好的例子matchTemplate找到了很好的匹配。它将搜索图像与正在搜索的图像进行卷积。它通常用于在较大的图像中查找较小的图像部分。

缺点:它只返回具有相同图像、相同尺寸和方向的良好结果。

OpenCV 方法:matchTemplate()

特征匹配

被认为是进行图像搜索的最有效方法之一。从图像中提取许多特征,以确保即使在旋转、缩放或倾斜时也能再次识别相同的特征。以这种方式提取的特征可以与其他图像特征集进行匹配。另一张图像与第一张图像匹配的特征比例很高,则被认为描绘了相同的场景。

找到两组点之间的单应性还可以让您找到原始图片之间拍摄角度的相对差异或重叠量。

有很多关于这方面的 OpenCV
教程/示例,还有一个不错的视频。一个完整的 OpenCV
模块(features2d)专用于它。

缺点:可能会很慢。它并不完美。


OpenCV 问答网站上,我正在讨论特征描述符之间的区别,这在比较整个图像和纹理描述符时非常有用,后者用于识别图像中的人脸或汽车等对象。

2022-08-05