OpenCV/Python:将图片与数据库匹配的快速方法

2024-06-01 01:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想匹配一张图片与一个数据库,其中包含2500多张图片,但我需要找到一种方法,以获得良好的结果,至少10万张图片。在

我已经读了很多关于stackoverflow的帖子,但是我找不到一个合适的解决方案来解决我的问题。 我考虑过使用直方图,但如果我理解得好,找到相似之处是有用的,但是我需要一个“完美”的匹配。在

我目前有一些代码在工作来完成这项任务,但它太慢了(大约6秒才能找到与2500幅图像匹配的图像)

我使用ORB检测器cv2.ORB()来查找关键点和描述符,FlannBasedMatcher和RANSAC的findHomography函数,如下所示。在

FLANN_INDEX_LSH = 6
flann_params = dict(algorithm = FLANN_INDEX_LSH, table_number = 6, key_size = 12, multi_probe_level = 1)
...
self.matcher = cv2.FlannBasedMatcher(params, {})
...
(_, status) = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, 4.0)

我想知道是否有更好的,更重要的,更快的方法来匹配我的数据库,也许还有一种不同的方法来在数据库中存储图片(我目前正在保存关键点和描述符)。在

我希望我是足够清楚,如果你需要更多的细节,在评论。在


Tags: 方法数据库index图片paramsstackoverflowcv2描述符
1条回答
网友
1楼 · 发布于 2024-06-01 01:30:06

我要做的是从一本书中识别出一个关于视频捕获的页面,这就是为什么我需要我的代码要快速、准确。在

我找到了一个更快的方法来完成这项工作,我在启动时用整个数据库建立了一个FLANN索引(3k图片没有那么慢),我得到了这个link的帮助。 而且,这是最重要的部分,我把flann_params改成了这样:

flann_params = dict(algorithm = FLANN_INDEX_LSH, table_number = 10, key_size = 20, multi_probe_level = 0)

为了不损失这些参数的准确性,我将用ORB检测器提取的特征点数量从400个更改为700个。在

它解决了我的问题,之前比赛是2到3秒(6秒没有弗兰恩指数),现在是25/30毫秒左右

但即使在这个解决方案之后,我仍然愿意接受新的建议,在不损失太多速度的情况下提高精度。在

相关问题 更多 >