我正在尝试将xfeatures2d
模块从opencv_contrib
添加到现有的OpenCV / Python项目中。
我已经从the repo下载了最新版本的模块,并使用以下附加参数再次构建了OpenCV:
OPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib-master/modules
BUILD_opencv_xfeatures2d=ON
摘自构建日志:
-- Installing: /usr/local/lib/python2.7/site-packages/cv2.so
-- Installing: /usr/local/lib/python3.4/site-packages/cv2.so
-- Installing: /usr/local/lib/libopencv_xfeatures2d.3.0.0.dylib
似乎新模块已正确安装。我可以在两个Python版本中导入cv2
。但是,两者都没有认识到模块应该添加的新功能。
>>> cv2.SURF()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'SURF'
>>> cv2.xfeatures2d.SURF()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'xfeatures2d'
答案 0 :(得分:14)
我遇到了同样的问题。我使用python 2.7.6和OpenCv 3.0以及其他非免费模块。我确实在可用模块中存在xfeatures2d并且可以导入它,但是就好像xfeatures2d不包含SIFT或SURF一样。无论我如何称呼它们都是同样的错误:
&#34;属性错误:&#39;模块&#39;对象没有属性&#39; SIFT&#39;
我尝试了不同的名称空间,并且最近才注意到这个细节, GOT IT WORKING!
$ python
&gt;&gt;&gt;导入cv2
&GT;&GT;&gt;帮助(cv2.xfeatures2d)
您会注意到它回复说它现在被称为......
功能
SIFT_create(...)
和
SURF_create(...)
非常简单 - 命名空间是不&#34; cv2.SIFT()&#34;或&#34; cv2.xfeatures2d.SIFT&#34;而是
<强> cv2.xfeatures2d.SIFT_create()强>
请试一试!
答案 1 :(得分:6)
从pip
安装Python 2.x
pip install opencv-contrib-python
Python 3.x
pip3 install opencv-contrib-python
如果发生permsision错误,请使用sudo。
答案 2 :(得分:4)
另一种可能性(也是我发现的最简单的一种)是安装已经包含SIFT和SURF算法的2.4.9版本。 你只需要这样做
import cv2
sift = cv2.SIFT()
(...)
答案 3 :(得分:2)
您缺少新的额外命名空间:
>>> help(cv2.xfeatures2d)
Help on module cv2.xfeatures2d in cv2:
NAME
cv2.xfeatures2d
FILE
(built-in)
FUNCTIONS
SIFT(...)
SIFT([, nfeatures[, nOctaveLayers[, contrastThreshold[, edgeThreshold[,
sigma]]]]]) -> <xfeatures2d_SIFT object>
SURF(...)
SURF([hessianThreshold[, nOctaves[, nOctaveLayers[, extended[, upright]]
]]]) -> <xfeatures2d_SURF object>
StarDetector(...)
StarDetector([, _maxSize[, _responseThreshold[, _lineThresholdProjected[
, _lineThresholdBinarized[, _suppressNonmaxSize]]]]]) -> <xfeatures2d_StarDetect
or object>
DATA
FREAK_NB_ORIENPAIRS = 45
FREAK_NB_PAIRS = 512
FREAK_NB_SCALES = 64
>>> surf = cv2.xfeatures2d.SURF(300)