我正在尝试一个简单的事情
detector = cv2.SIFT()
并得到这个错误的错误
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'
我不明白,因为安装了cv2。
cv2.__version__
是
$Rev: 4557 $
我的系统是Ubuntu 12.04。
也许某人有同样的问题,可以帮助我。
编辑:
长话短说,testypypypy.py:
import cv2
detector = cv2.SIFT()
错误:
Traceback (most recent call last):
File "testypypy.py", line 3, in <module>
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT
如果我采取SURF
它是有效的,因为SURF
在dir(cv2)
但如果我也采取cv2.BFMatcher()
我得到相同的错误...所以它失踪了,我必须添加它,但我不知道如何。
我认为这远非“正确”的做法(Ubuntu上的“正确”方式似乎是坚持破坏和/或过时的OpenCV),但对我来说,从源代码构建opencv-2.4.6.1会带回来cv2.SIFT和cv2.SURF。
脚步:
tar -xf opencv-2.4.6.1.tar.gz -C /tmp
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_PYTHON_SUPPORT=ON \
-D WITH_XINE=ON \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D BUILD_EXAMPLES=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D CMAKE_INSTALL_PREFIX=~/.opencv-2.4.6.1 \
/tmp/opencv-2.4.6.1
cd /tmp/opencv-2.4.6.1
make -j4
make install
export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages
现在,如果我启动python并导入cv2(对我来说,这会产生一个gnome-keyring警告),我有cv2.SIFT和cv2.SURF可用。
在opencv3.x中,SIFT()和SURF()不再存在。为此
卸载所有opencv版本
python -m pip uninstall opencv-python
python -m pip uninstall opencv-contrib-python
之后使用python(3.x)使用下面给出的命令安装opencv-contrib以包含sift()和surf()
python -m pip install opencv-contrib-python==3.4.2.16
然后你可以使用
sift = cv2.xfeatures2d.SIFT_create()
vizzy建议的方法也适用于OpenCV 2.4.8,就像在Ubuntu 14.04 LTS下构建非免费软件包一样。
此依赖性问题可能会阻止安装非免费软件包:
libopencv-nonfree2.4 depends on libopencv-ocl2.4; however:
Package libopencv-ocl2.4 is not installed.
易于修复,因为丢失的软件包可以从刚刚构建的软件包安装:
dpkg -i libopencv-ocl2.4_2.4.8+dfsg1-2ubuntu1_amd64.deb
之后,按照vizzy的回答中的说明进行安装。
以上建议的解决方案均不适合我。我使用Anaconda,发现opencv版本3.3.1仍然启用了Sift。如果您想在隔离的conda环境中进行测试,请尝试以下@ A.Ametov的回答
conda create -n testenv opencv=3.3.1
conda activate testenv
conda activate myenv
python
#Check version of opencv being used
>>> import cv2
>>> cv2.__version__
#Check if Sift is available
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
改变这个:
sift = cv2.xfeatures2d.SIFT_create()
这样:
cv2.ORB_create()
只需将opencv的版本更改为3.4.2.16。由于它已获得专利,因此在较新版本中不可用。
有一个点源使这很容易。
pip uninstall opencv-python
pip install opencv-contrib-python
import cv2
sift = cv2.xfeatures2d.SIFT_create()
仅供参考,自3.0.0起,SIFT和朋友们在https://github.com/Itseez/opencv_contrib的contrib repo中,默认情况下不包含在opencv中。
对于debian用户来说,“轻松”创建自己的libopencv-nonfree包。
我遵循了python的opencv教程,但在我的debian中,SIFT和SURF模块丢失了。并且没有非免费软件包可用于debian,包括SIFT和SURF等。
由于许可证问题,他们被从包装中剥离了....
我从来没有为debian创建一个包(添加一个新的模块等),但是我在debian教程中遵循了一些小步骤并且尝试了一下,并且在一天之后,瞧...我工作了一个libopencv-nonfree2。 4个deb包和一个带有正确绑定的python模块。
(我不知道我是否还需要安装新构建的python-opencv软件包或仅安装非自由软件...我重新安装了两个软件包并获得了一个带有所有必需的非自由模块的python opencv库!)
好的,这是:
!这是针对libopencv 2.4的!
!除了作为普通用户安装外,您可以执行所有步骤!
我们需要构建的essentials和debian存储库中的一些工具来编译和创建一个新的包:
sudo apt-get install build-essential fakeroot devscripts
在您的家中创建一个目录并切换到该目录:
cd ~ && mkdir opencv-debian
cd opencv-debian
下载所需的包:
apt-get source libopencv-core2.4
并下载所有需要的依赖包以构建新的opencv
apt-get build-dep libopencv-core2.4
这将下载所需的源并创建一个名为“opencv-2.4.9.1 + dfsg”的目录
切换到该目录:
cd opencv-2.4.9.1+dfsg
现在,您可以通过键入以下内容来测试是否构建包而无需修改:
fakeroot debian/rules binary
这将需要很长时间!这一步应该没有错误,你现在在opencv-debian目录中有很多.deb包
现在我们对包定义进行一些修改,让debian构建非自由模块和包!
更改为opencv-debian目录并下载正确的opencv源..在我的情况下opencv 2.4.9左右
我从https://github.com/Itseez/opencv/releases得到了我的
wget https://codeload.github.com/Itseez/opencv/tar.gz/2.4.9
这将下载opencv-2.4.9.tar.gz
提取存档:
tar -xzvf opencv-2.4.9.tar.gz
这会将原始源解压缩到名为opencv-2.4.9的目录中
现在将非自由模块从原始源复制到debian源:
cp -rv opencv-2.4.9/modules/nonfree opencv-2.4.9.1+dfsg/modules/
好的,现在我们有非自由模块的来源,但这对于debian来说还不够......我们需要修改1个文件并创建一个新文件
我们必须编辑debian控制文件并在文件末尾添加一个新的部分:(我在这里使用mcedit作为编辑器)
mcedit opencv-2.4.9.1+dfsg/debian/control
或使用您选择的任何其他编辑器
并添加此部分:
Package: libopencv-nonfree2.4
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: OpenCV Nonfree Modules like SIFT and SURF
This package contains nonfree modules for the OpenCV (Open Computer Vision)
library.
.
The Open Computer Vision Library is a collection of algorithms and sample
code for various computer vision problems. The library is compatible with
IPL (Intel's Image Processing Library) and, if available, can use IPP
(Intel's Integrated Performance Primitives) for better performance.
.
OpenCV provides low level portable data types and operators, and a set
of high level functionalities for video acquisition, image processing and
analysis, structural analysis, motion analysis and object tracking, object
recognition, camera calibration and 3D reconstruction.
现在我们创建一个名为libopencv-nonfree2.4.install的新文件
touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
并编辑:
mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
并添加以下内容:
usr/lib/*/libopencv_nonfree.so.*
好吧,就是这样,现在再次创建包:
cd opencv-2.4.9.1+dfsg
先清理一下:
fakeroot debian/rules clean
并建立:
fakeroot debian/rules binary
et voila ...过了一会儿你有一个新的内置和一个新包libopencv-nonfree2.4.deb!
现在以root身份安装:
dpkg -i libopencv-nonfree2.4.deb
dpkg -i python-opencv.deb
并测试!
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp)
corners = cv2.goodFeaturesToTrack(gray,16,0.05,10)
corners = np.int0(corners)
for i in corners:
x,y = i.ravel()
cv2.circle(img,(x,y),90,255,3)
plt.imshow(img),plt.show()
玩得开心!
因为我在发现这个问题时已经编译过opencv,所以我所要做的就是(来自我的opencv构建目录):
make opencv_nonfree
sudo make install
作为Anaconda用户,我想找到一两个适当的命令来解决问题。幸运的是,这个answer有所帮助。对于conda 4.5.11(使用conda -V
检查Anaconda版本),我已执行了下一步:
# Python version does not matter, most likely, check yourself
conda create -n myenv python=3.6
conda activate myenv
conda install -c menpo opencv
那将安装OpenCV 2.4.11。 Anaconda的另一个command conda install -c menpo opencv3
将安装OpenCV3,但Python必须降级到2.7。要使用Python3安装OpenCV3,请使用next(由于第一个链接):
conda create -n myenv python
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
检查SIFT:
conda activate myenv
python
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
按照此安装步骤操作
http://jayrambhia.com/blog/install-opencv-2-4-in-ubuntu-12-04-precise-pangolin/
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local
-D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON
-D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON
-D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
使用此命令将库安装到/ usr / local / lib。
import cv2
sift = cv2.xfeatures2d.SIFT_create()
sift.something()
这是安装Contrib的简便方法。