python - 二进制掩码之间的关键点检测和匹配

标签 python opencv computer-vision template-matching keypoint

我正在尝试使用opencv(tutorial)匹配关键点,如下图所示。
问题是我不确定是否需要调整某些参数,或者我完全使用了错误的方法。仅获取map.png的右侧也无济于事。
这是我的代码,也是结果。


import numpy as np
import cv2
import matplotlib.pyplot as plt

img1 = cv2.imread('../map.png',0)
img2 = cv2.imread('../mask.png',0)

orb = cv2.ORB_create()

kp1, des1 = orb.detectAndCompute(img1,None)
kp2, des2 = orb.detectAndCompute(img2,None)

bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

matches = bf.match(des1,des2)

matches = sorted(matches, key = lambda x:x.distance)

img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches[:20], None, flags=2)
cv2.imwrite('test.png', img3)

最佳答案

您使用的诸如ORB之类的特征检测器旨在匹配平移,旋转和缩放比例不同的图像之间的特征点。当图像的透 View 差异很大时(即您的情况),则不打算使用它们,因此您的方法不起作用。此外,这种算法是为诸如照片等纹理丰富的图像设计的。在您的情况下,这些特征是重复的(从第一张图像中提取的多个特征点(例如线尾)可以与另一个特征点匹配)。
在您的情况下,您应该考虑其他功能,例如基于线相交的功能,请参见tutorial以获取更多信息。这仅是一个提示,而不是解决问题的方法,因为这确实具有挑战性。

关于python - 二进制掩码之间的关键点检测和匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57336922/

相关文章:

python - 检查数百万搜索查询中是否存在大量单词的有效方法

python - 在 Python 中将纳秒转换为时间戳

python - OpenCV 不会加载大图像 (~4GB)

c++ - 提高 Basler 相机的 fps

computer-vision - 在 Colab 中,使用 "imgaug"进行图像数据增强未按预期工作

python - 使用 PRAW 拉取 1000 多个热门条目

python - 如何解决python中的错误 'list assignment index out of range'

python-3.x - 错误 : How to fix "SystemError: <built-in function imshow> returned NULL without setting an error" in Opencv python

c++ - 使用多线程调试 DLL (/MDd) C 运行时库构建静态 Opencv 库

python - 如何使用 Python OpenCV 在图像中查找单个数字?