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 - 在 OpenCV Python 中获取 src 类型 CV_8UC3 到 CV_8UC1 时出错?

python - 将 labelImg XML 矩形转换为带有图像数据的 labelMe JSON 多边形

python - 在OpenCV VideoCapture或Vidgear中访问/打开嵌入式视频

object - 用opencv跟踪矩形

python - opencv中createBackgroundSubtractorMOG2函数的行为

python - 是否可以在 Sphinx 中隐藏 Python 函数参数?

python - 查找困在列表中的字符数

c++ - Qt Creator + OpenCV : Program runs from . exe 但不是来自编辑器

computer-vision - 分段常数和分段平滑有什么区别?

python - 如何将数据框中的真假值转换为 1 为真,0 为假