我完全遵循了这个简单的OpenCV Feature Matching example:
import cv2
img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB() # Initiate SIFT detector
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img, None)
并且一直收到以下错误:
TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)
我正在使用OpenCV 3.3.1
答案 0 :(得分:39)
这是OpenCV版本兼容性问题。只需使用cv2.ORB_create()
代替cv2.ORB()
。
代码应如下所示:
import cv2
img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB_create() # Initiate SIFT detector
# find the keypoints and descriptors with SIFT
kp1, des1 = orb.detectAndCompute(img, None)
答案 1 :(得分:2)
请注意,python结构会“频繁”更改(无论如何,在Internet历史上都是如此)。注意版本是个好主意。
转到此处找到正确的链接:https://docs.opencv.org/
3.1.1-> 3.1.0-> https://docs.opencv.org/3.1.0/(OpenCV-Python教程-> https://docs.opencv.org/3.1.0/d6/d00/tutorial_py_root.html)...不如那个(旧的)readthedocs网站那么漂亮,但是更多准确。 :)
答案 2 :(得分:0)
使用cv2.ORB_create()可以做到