Python3 TypeError: Required argument 'outImg' (pos 6) not found
阿新 • • 發佈:2019-01-10
問題:在用python3使用img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2)的時候,可能會產生錯誤:TypeError: Required argument 'outImg' (pos 6) not found
import numpy as np import cv2 from matplotlib import pyplot as plt img1 = cv2.imread('data/queryImage.jpg', 0) # queryImage img2 = cv2.imread('data/trainImage.jpg', 0) # trainImage # Initiate SIFT detector sift = cv2.xfeatures2d.SIFT_create() # find the keypoints and descriptors with SIFT kp1, des1 = sift.detectAndCompute(img1,None) kp2, des2 = sift.detectAndCompute(img2,None) # BFMatcher with default params bf = cv2.BFMatcher() matches = bf.knnMatch(des1,des2, k=2) # Apply ratio test good = [] for m,n in matches: if m.distance < 0.75*n.distance: good.append([m]) # cv2.drawMatchesKnn expects list of lists as matches. img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2) ....
報錯資訊:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-54-8a7d0ce88553> in <module>() 18 good.append([m]) 19 # cv2.drawMatchesKnn expects list of lists as matches. ---> 20 img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2) 21 plt.imshow(img3),plt.show() TypeError: Required argument 'outImg' (pos 6) not found
解決:將img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,flags=2) 替換為:
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2) 即:如果沒有outImg引數則傳入None。
分析:
在最後一個demo中:是將outImg引數以None的形式傳入。
import cv2 cv2.drawMatchesKnn? ------------------------------------------------------------------------------------------------------ Docstring: drawMatchesKnn(img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg . @overload Type: builtin_function_or_method demo: draw_params = dict(matchColor = (0,255,0), singlePointColor = (255,0,0), matchesMask = matchesMask, flags = 0) img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,matches,None,**draw_params)
在python3中,如果沒有outImg引數則傳入None就沒問題了。
變更樣例:
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
可參考文章:https://www.e-learn.cn/content/wangluowenzhang/309127
說明:問題產生的環境
Python版本:3.6.5
OpenCV版本:3.4.2