opencv中的SIFT()不工作:"模块 "对象没有属性 "SURF

问题描述 投票:7回答:7

我试图在Ubuntu的shell中运行最简单的opencv SIFT代码,但没有成功。

我得到一个错误。

AttributeError: 'module' object has no attribute 'SURF'

代码:

import cv2
cv2.SIFT()

我的配置:

  • Ubuntu版本是13.10 64bit
  • cv2.__version__ 是2.4.5
  • dir(cv2)的输出是(仅S字母)

'scaleAdd', 'segmentMotion', 'sepFilter2D', 'setIdentity', 'setMouseCallback', 'setTrackbarPos', 'setUseOptimized', 'setWindowProperty', 'solve', 'solveCubic', 'solvePnP'。 'solvePnPRansac', 'solvePoly', 'sort', 'sortIdx', 'split', 'sqrt', 'startWindowThread', 'stereoCalibrate', 'stereoRectify', 'stereoRectifyUncalibrated', 'subtract', 'sumElems' 。

python opencv python-2.7 ubuntu sift
7个回答
4
投票
import cv2
sift = cv2.SIFT()

如果你使用的是opencv 3.0或更高版本,这段代码将不起作用。

sift = cv2.xfeatures2d.SIFT_create()
(Only works if you have installed opencv-contrib-python library )

如果你有一个opencv-contrib-python版本> 3.4,那么在不同的 erro下,它将无法工作。

错误。OpenCV(4.1.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:functionfeature没有实现) 该算法已获专利,在此配置中被排除在外。在函数'cv::xfeatures2d::SIFT::create'中设置 OPENCV_ENABLE_NONFREE CMake 选项并重建库。

最好的解决办法是。

**step 1: pip uninstall opencv-python**

**step 2: pip install opencv-contrib-python==3.4.2.16**

这对我很有效

注:如果你没有使用pip install opencv-python安装opencv,只需删除下载的库,然后按照上面的说明操作即可。


2
投票

虽然不是最顺畅的方法,但对我来说是有效的。

正如你在我的问题评论中所看到的那样,@Berak 向我解释说,SIFT 算法和 FAST 算法都是专利,这意味着它们不是常规 opencv 安装的一部分。

因此,我搜索了一个python发行版,它将拥有这一切--我找到了一个。所以,我并没有像 @Berak 建议的那样真正解决这个问题,而是使用了 Python(x,y)

谢谢你的帮助。

Ozrad


2
投票

这是让我疯狂的,但刮所有其他的建议,原来你现在可以得到SIFT和SURF只需两个终端命令!确保你的电脑没有其他opencv。

  1. 确保你的电脑上没有其他opencv......

    pip uninstall opencv-python
    
  2. 然后得到贡献版(有SIFT和SURF+其他)......

    pip install opencv-contrib-python
    

它应该安装,但注意名字有点不同。

import cv2
sift = cv2.xfeatures2d.SIFT_create()

!!!!Pip pip hurray!! (这只是一个双关语,不是代码的一部分)


1
投票

我在使用SIFt时也有问题,因为我只有openCV。但是在安装了ROS Hydro之后,我就可以使用SIFTSURF了,因为它们属于非自由部分。


1
投票

我为SIFT找到了一个简单的代码

import cv2
import numpy as np

img = cv2.imread('home.jpg')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT()
kp = sift.detect(gray,None)

img=cv2.drawKeypoints(gray,kp)

cv2.imwrite('sift_keypoints.jpg',img)

我测试了代码,它的工作


0
投票

我按照openCV的python窗口安装 指南. 我去尝试使用cv2.SIFT,发现在这个安装中是不可用的。

在完全 移除 python 2.7和openCV,然后我安装了python(x,y)并包含openCV。我得到的是cv2。版本 '2.4.8'

And:cv2.SIFT -> cv2.SURF

所以python(x,y)确实包含了SIFT,SURF模块。


0
投票

你可以很容易地使用它,如下。

sift = cv2.xfeatures2d_SIFT()

keypoints_detector = sift.detect(image=your_grayscale_image, mask=None)
© www.soinside.com 2019 - 2024. All rights reserved.