OpenCV SIFT匹配报错:matches1to2需cv::DMatch类型求助
解决OpenCV中
cv2.drawMatches抛出的TypeError问题 刚碰到过一模一样的坑!我把ORB匹配改成SIFT的时候也踩了这个TypeError,正好能给你捋清楚原因和解决办法:
问题根源
你用BFMatcher.knnMatch()得到的匹配结果格式,和cv2.drawMatches()要求的输入完全不兼容:
knnMatch()返回的是嵌套列表,每个元素是包含k个最佳匹配的cv::DMatch集合- 但
cv2.drawMatches()只接受一维的单个DMatch对象列表,所以才会提示"Expected cv::DMatch for argument 'matches1to2'"
直接解决方案
正如你找到的,换成专门为knn匹配结果设计的cv2.drawMatchesKnn()就可以完美解决:
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,flags=2)
额外小技巧(如果需要用单组匹配)
要是你只需要保留每个特征点的最佳匹配(比如knnMatch时设置了k=1),也可以把嵌套的匹配结果展平成一维列表后继续用cv2.drawMatches():
# 展平knn匹配结果(假设k=1) matches_single = [match[0] for match in matches] img3 = cv2.drawMatches(img1,kp1,img2,kp2,matches_single,None,flags=2)
内容的提问来源于stack exchange,提问作者Undead
相关产品推荐
相关产品推荐

