OpenCV 3.3.1调用ORB检测器出现TypeError错误求助
解决OpenCV 3.3.1中ORB初始化的TypeError问题
嘿,我之前正好遇到过一模一样的问题!你用的是OpenCV 3.3.1,这个版本里ORB特征检测器的初始化规则和旧版本不一样,才会抛出TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)这个错误。
问题根源
在OpenCV 3.x系列版本中,官方对特征检测器的API做了调整:原来直接实例化cv2.ORB()的方式被废弃了,现在必须通过create()类方法来创建Feature2D派生类的实例,ORB作为Feature2D的子类,自然要遵循这个新规则。
修正后的代码
把你原来代码里orb = cv2.ORB()这一行替换成orb = cv2.ORB_create()就可以正常运行了,完整代码如下:
import cv2 img = cv2.imread('box.png', 0) # queryImage orb = cv2.ORB_create() # 用create()方法初始化ORB检测器 # 查找关键点和描述符 kp1, des1 = orb.detectAndCompute(img, None)
额外小技巧
如果需要自定义ORB的检测参数(比如特征点数量、尺度因子、金字塔层数等),可以直接在ORB_create()里传入对应参数,比如:
# 自定义特征点数量为500,尺度因子为1.2 orb = cv2.ORB_create(nfeatures=500, scaleFactor=1.2)
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

