Lin*_*nda 52 python opencv surf sift
我正在尝试一个简单的事情
detector = cv2.SIFT()
Run Code Online (Sandbox Code Playgroud)
并得到这个错误的错误
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'
Run Code Online (Sandbox Code Playgroud)
我不明白,因为安装了cv2.
cv2.__version__
是
$Rev: 4557 $
Run Code Online (Sandbox Code Playgroud)
我的系统是Ubuntu 12.04.
也许某人有同样的问题,可以帮助我.
编辑:
长话短说,testypypypy.py:
import cv2
detector = cv2.SIFT()
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "testypypy.py", line 3, in <module>
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT
Run Code Online (Sandbox Code Playgroud)
如果我认为SURF
它是有效的,因为SURF
它在,dir(cv2)
但如果我也采取cv2.BFMatcher()
我得到相同的错误...所以它失踪了,我必须添加它,但我不知道如何.
小智 62
有一个点源使这很容易.
如果您安装了另一个版本的opencv-python,请使用此命令将其删除以避免冲突:
pip uninstall opencv-python
Run Code Online (Sandbox Code Playgroud)然后使用以下命令安装contrib版本:
pip install opencv-contrib-python
Run Code Online (Sandbox Code Playgroud)SIFT用法:
import cv2
sift = cv2.xfeatures2d.SIFT_create()
Run Code Online (Sandbox Code Playgroud)小智 57
有关此问题的最新信息(截至2015年9月),请参阅此页面.
这里关于这个问题的大多数信息已经过时了.
pyimagesearch所说的是,opencv_contrib
由于专利问题,SURF/SIFT被转移.
对于安装,还有一个很好的页面,告诉您如何安装opencv opencv_contrib
和Python支持,以便获得SURF/SIFT.
请注意,API也已更改.现在它是这样的:
sift = cv2.xfeatures2d.SIFT_create()
Run Code Online (Sandbox Code Playgroud)
在我找到上述页面之前,我也遭受了相当多的困扰.但是列出的页面在帮助安装和解释错误方面做得非常好.
Spe*_*hal 28
仅供参考,从3.0.0开始,SIFT和朋友们都在https://github.com/Itseez/opencv_contrib的contrib repo中,默认情况下不包含在opencv中.
Mår*_*n W 23
我认为这远非"正确"的做法(Ubuntu上的"正确"方式似乎是坚持破碎和/或过时的OpenCV),但对我来说,从源代码构建opencv-2.4.6.1会带回来cv2.SIFT和cv2.SURF.
脚步:
提取源:
tar -xf opencv-2.4.6.1.tar.gz -C /tmp
Run Code Online (Sandbox Code Playgroud)配置源.这将告诉OpenCV在您的主目录中安装到.opencv-2.4.6.1:
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
Run Code Online (Sandbox Code Playgroud)构建和安装:
cd /tmp/opencv-2.4.6.1
make -j4
make install
Run Code Online (Sandbox Code Playgroud)设置PYTHONPATH(这在bash中工作,我对其他shell没有任何线索):
export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)现在,如果我启动python并导入cv2(对我来说,这会产生一个gnome-keyring警告),我有cv2.SIFT和cv2.SURF可用.
对于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的!
!除了作为普通用户安装外,您可以执行所有步骤!
我们需要构建的essesntials和debian存储库中的一些工具来编译和创建一个新的包:
sudo apt-get install build-essential fakeroot devscripts
Run Code Online (Sandbox Code Playgroud)
在您的家中创建一个目录并切换到该目录:
cd ~ && mkdir opencv-debian
cd opencv-debian
Run Code Online (Sandbox Code Playgroud)
下载所需的包:
apt-get source libopencv-core2.4
Run Code Online (Sandbox Code Playgroud)
并下载所有需要的依赖包以构建新的opencv
apt-get build-dep libopencv-core2.4
Run Code Online (Sandbox Code Playgroud)
这将下载所需的源并创建一个名为"opencv-2.4.9.1 + dfsg"的目录
切换到该目录:
cd opencv-2.4.9.1+dfsg
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过键入以下内容来测试是否构建包而无需修改:
fakeroot debian/rules binary
Run Code Online (Sandbox Code Playgroud)
这将需要很长时间!这一步应该没有错误,你现在在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
Run Code Online (Sandbox Code Playgroud)
这将下载opencv-2.4.9.tar.gz
提取存档:
tar -xzvf opencv-2.4.9.tar.gz
Run Code Online (Sandbox Code Playgroud)
这会将原始源解压缩到名为opencv-2.4.9的目录中
现在将非自由模块从原始源复制到debian源:
cp -rv opencv-2.4.9/modules/nonfree opencv-2.4.9.1+dfsg/modules/
Run Code Online (Sandbox Code Playgroud)
好的,现在我们有非自由模块的来源,但这对于debian来说还不够......我们需要修改1个文件并创建一个新文件
我们必须编辑debian控制文件并在文件末尾添加一个新的部分:(我在这里使用mcedit作为编辑器)
mcedit opencv-2.4.9.1+dfsg/debian/control
Run Code Online (Sandbox Code Playgroud)
或使用您选择的任何其他编辑器
并添加此部分:
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.
Run Code Online (Sandbox Code Playgroud)
现在我们创建一个名为libopencv-nonfree2.4.install的新文件
touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
Run Code Online (Sandbox Code Playgroud)
并编辑:
mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
Run Code Online (Sandbox Code Playgroud)
并添加以下内容:
usr/lib/*/libopencv_nonfree.so.*
Run Code Online (Sandbox Code Playgroud)
好吧,就是这样,现在再次创建包:
cd opencv-2.4.9.1+dfsg
Run Code Online (Sandbox Code Playgroud)
先清理一下:
fakeroot debian/rules clean
Run Code Online (Sandbox Code Playgroud)
并建立:
fakeroot debian/rules binary
Run Code Online (Sandbox Code Playgroud)
et voila ...过了一会儿你有一个新的内置和一个新包libopencv-nonfree2.4.deb!
现在以root身份安装:
dpkg -i libopencv-nonfree2.4.deb
dpkg -i python-opencv.deb
Run Code Online (Sandbox Code Playgroud)
并测试!
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()
Run Code Online (Sandbox Code Playgroud)
玩得开心!
在 opencv3.x 中,SIFT() 和 SURF() 不再存在。为此
卸载所有 opencv 版本
python -m pip uninstall opencv-python
python -m pip uninstall opencv-contrib-python
Run Code Online (Sandbox Code Playgroud)
之后安装 opencv-contrib 以包含 sift() 和 surf() 使用下面给定的命令与 python(3.x)
python -m pip install opencv-contrib-python==3.4.2.16
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
sift = cv2.xfeatures2d.SIFT_create()
Run Code Online (Sandbox Code Playgroud)
作为 Anaconda 用户,我想找到一两个合适的命令来解决问题。幸运的是,这个答案有所帮助。对于 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
Run Code Online (Sandbox Code Playgroud)
这将安装 OpenCV 2.4.11。Anaconda 的另一个命令 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
Run Code Online (Sandbox Code Playgroud)
检查 SIFT:
conda activate myenv
python
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
Run Code Online (Sandbox Code Playgroud)