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天,您在需要使用的时候【私信】联系我,我会为您补发。