python中OpenCV4.5.5 无法通过cv.drawMatches剔除错误匹配

问题遇到的现象和发生背景

python3.8.5环境,OpenCv4.5.5版本做两图像拼接,暴力匹配后得到大量匹配,后面用cv.RANSAC剔除其中的错误匹配,再接着用cv.drawMatches画出剩余正确匹配时,只要加上参数matchesMask就提示错误,导致无法剔除,求指导!!

问题相关代码,请勿粘贴截图
bf = cv.BFMatcher_create(cv.NORM_HAMMING,True
matches_hamm =  bf.match(des1,des2)
print(len(matches_hamm))
img_draw = cv.drawMatches(img1,kp1,img2,kp2,matches_hamm,None,matchColor =(0,0,255))
show(img_draw)
matches_hamm =  bf.match(des1,des2)
print(len(matches_hamm))
img_draw = cv.drawMatches(img1,kp1,img2,kp2,matches_hamm,None,matchColor =(0,0,255))
show(img_draw)
points1 = np.array([kp1[m.queryIdx].pt for m in matches])
points2 = np.array([kp2[m.trainIdx].pt for m in matches])
H,mask_match = cv.findHomography(points1,points2,cv.RANSAC)
*******************************************
img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchColor=(0,0,255),matchesMask=mask_match,matchesThickness = 1)
#img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchesThickness=1,matchColor=(0,0,255),matchesMask=mask_match)
show(img_match)
运行结果及报错内容

error Traceback (most recent call last)
C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_9528/369469700.py in
----> 1 img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchColor=(0,0,255),matchesMask=mask_match,matchesThickness = 1)
2 #img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchesThickness=1,matchColor=(0,0,255),matchesMask=mask_match)
3 show(img_match)

error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'drawMatches'

Overload resolution failed:

  • 'matchesThickness' is an invalid keyword argument for drawMatches()
  • 'matchesThickness' is an invalid keyword argument for drawMatches()
  • Can't parse 'matchesMask'. Sequence item with index 0 has a wrong type
  • Can't parse 'matchesMask'. Sequence item with index 0 has a wrong type
我的解答思路和尝试过的方法

删除matchesMask=mask_match就可以显示之前含错误匹配的图,但是没有去除错误匹配
删除,matchesThickness = 1提示缺少参数


error Traceback (most recent call last)
C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_9528/3406491763.py in
----> 1 img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchColor=(0,0,255),matchesMask=mask_match)
2 #img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchesThickness=1,matchColor=(0,0,255),matchesMask=mask_match)
3 show(img_match)

error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'drawMatches'

Overload resolution failed:

  • Can't parse 'matchesMask'. Sequence item with index 0 has a wrong type
  • Can't parse 'matchesMask'. Sequence item with index 0 has a wrong type
  • drawMatches() missing required argument 'matchesThickness' (pos 7)
  • drawMatches() missing required argument 'matchesThickness' (pos 7)
    改matchesThickness = 0也不行,提示错误
我想要达到的结果

能正确运行代码
img_match = cv.drawMatches(img1,kp1,img2,kp2,matches,None,matchColor=(0,0,255),matchesMask=mask_match,matchesThickness = 1)
实现剔除错误匹配

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。