opencv中的SIFT()无效

时间:2014-02-09 18:55:45

标签: python opencv python-2.7 ubuntu sift

我试图通过Ubuntu的shell运行最简单的opencv SIFT代码,没有运气

我收到错误:

  

AttributeError:'module'对象没有属性'SURF'

代码:

import cv2
cv2.SIFT()

我的配置:

  • Ubuntu版本是13.10 64bit
  • “cv2。 版本 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'

  •   

9 个答案:

答案 0 :(得分:2)

不是最顺利的方式,但它对我有用。

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

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

感谢您的帮助,

Ozrad

答案 1 :(得分:2)

这让我疯狂,但抓住所有其他建议,结果你现在可以只用两个终端命令获得SIFT和SURF!

  1. 请确保您的计算机上没有其他opencv ...

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

    pip install opencv-contrib-python
    
  3. 它应该安装,但请注意名称有点不同。

    import cv2
    sift = cv2.xfeatures2d.SIFT_create()
    

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

答案 2 :(得分:1)

我在使用SIFt时遇到了问题,因为我只有openCV。但在安装ROS Hydro之后,我可以使用SIFT / SURF,因为它们属于非自由部分。

答案 3 :(得分: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)

我测试了代码,它可以运行

答案 4 :(得分:0)

我按照openCV python windows安装guide。我去尝试使用cv2.SIFT并发现它在此安装中不可用。

在完全removing python 2.7和openCV之后,我安装了python(x,y)并包含了openCV。我得到了 CV2 版本
' 2.4.8'

和: cv2.SIFT - > cv2.SURF

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

答案 5 :(得分:0)

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,请再次输入 它将无法与其他错误一起使用

  

错误:OpenCV(4.1.0)   C:\ projects \ opencv-python \ opencv_contrib \ modules \ xfeatures2d \ src \ sift.cpp:1207:   错误:(-213:未实现功能/功能)此算法   已获得专利并在此配置中排除;组   OPENCV_ENABLE_NONFREE CMake选项并在函数中重建库   'cv :: xfeatures2d :: SIFT :: create'

对此的最佳解决方案是:

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

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

这对我有用。

[注意:如果您尚未使用pip install opencv-python安装opencv,则只需删除已下载的库并按照上述说明进行操作即可

答案 6 :(得分:0)

您可以轻松地按以下方式使用它:

sift = cv2.xfeatures2d_SIFT()

keypoints_detector = sift.detect(image=your_grayscale_image, mask=None)

答案 7 :(得分:0)

SIFT 和 SURF 都是各自作者的专利算法。以前它们在 OpenCV 的主存储库中不可用,但在 contrib 中不可用,但现在根据 OpenCV,它们的专利已在 2020 年到期,因此在最新版本的主存储库中添加了 SIFT 和 SURF。我试过 4.5.2 并且效果很好。

您可以使用 pip3 install opencv-python=4.5.2 安装此 opencv 版本。

要实例化和测试 SIFT,请使用以下代码。

import numpy as np
import cv2 as cv

img = cv.imread('home.jpg')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)
cv.imwrite('sift_keypoints.jpg',img)

答案 8 :(得分:0)

使用 4.4.0 以上的版本,SIFT 再次移入主库。 https://opencv.org/opencv-4-4-0/

pip install opencv-python==4.4.0.46
import cv2
sift = cv2.SIFT_create()