OpenCV ORB 描述符:TypeError:不正确的自我类型(必须是“Feature2D”或其派生词)

Posted

技术标签:

【中文标题】OpenCV ORB 描述符:TypeError:不正确的自我类型(必须是“Feature2D”或其派生词)【英文标题】:OpenCV ORB descriptor: TypeError: Incorrect type of self (must be 'Feature2D' or its derivative) 【发布时间】:2018-10-02 22:22:56 【问题描述】:

我完全遵循了这个简单的OpenCV Feature Matching example:

import cv2

img = cv2.imread('box.png',0) # queryImage
orb = cv2.ORB()               # Initiate ORB detector

# find the keypoints and descriptors with ORB
kp1, des1 = orb.detectAndCompute(img, None)

并且一直收到以下错误:

TypeError: Incorrect type of self (must be 'Feature2D' or its derivative)

我正在使用 OpenCV 3.3.1

【问题讨论】:

【参考方案1】:

这是一个 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)

【讨论】:

【参考方案2】:

请注意,python 结构“经常”更改(无论如何在互联网历史上)。注意版本是个好主意。

去这里找到正确的链接: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 网站漂亮,但更准确。 :)

【讨论】:

【参考方案3】:

cv2.ORB_create() 会做我认为的工作

【讨论】:

如果您要复制答案,请格式化您的代码。

以上是关于OpenCV ORB 描述符:TypeError:不正确的自我类型(必须是“Feature2D”或其派生词)的主要内容,如果未能解决你的问题,请参考以下文章

Python中opencv2 ORB数据结构的深拷贝

使用 OpenCV Cuda ORB 特征检测器

OpenCV+Python特征提取算法与图像描述符之SIFT / SURF / ORB

opencv2.4.10里怎么调用orb

使用 ORB python opencv 匹配特征

使用 OpenCV 从小图像中提取点描述符