我有一个图像数据库。当我拍摄新照片时,我想用OpenCV将其与此数据库中的图像进行比较,并获得相似度分数。这样我就可以检测出是否有一张图片非常类似于新照片。
是否有可能创建我的数据库图像的指纹/哈希,并将新的图像与之匹配?
我正在寻找算法代码片段或技术演示,而不是商业解决方案。
最好的祝福,
斯特凡
是否有可能创建我的数据库图像的指纹/哈希,并将新的图像与之匹配?
我正在寻找算法代码片段或技术演示,而不是商业解决方案。
最好的祝福,
斯特凡
正如Paul R所评论的那样,这个“指纹/哈希”通常是一组特征向量或一组特征描述符。但是,在计算机视觉中使用的大多数特征向量都通常对于针对数据库进行搜索来说计算成本太高。因此,这项任务需要一种特殊的特征描述符,因为即使使用各种优化,像SURF和SIFT这样的描述符在搜索时也会花费太多时间。
OpenCV为您的任务(对象分类)提供的唯一功能是实现视觉词袋(BOW)。
它可以计算特殊类型的图像特征并训练视觉词汇。接下来,您可以使用此词汇在数据库中查找相似的图像并计算相似度得分。
这里是OpenCV的文档关于词袋的介绍。此外,OpenCV还有一个名为bagofwords_classification.cpp
的示例。它非常庞大,但可能会有帮助。
您可以使用pHash
算法,并将phash
值存储在数据库中,然后使用以下代码:
double const mismatch = algo->compare(image1Hash, image2Hash);
这里的“mismatch”值可以轻松告诉您两个图像之间的相似度比率。
pHash函数:
这些函数足以在各个方面评估图像相似性。