我试图通过Ubuntu的shell运行最简单的opencv SIFT代码,没有运气
我收到错误:
AttributeError:'module'对象没有属性'SURF'
代码:
import cv2
cv2.SIFT()
我的配置:
'scaleAdd','segmentMotion','sepFilter2D','setIdentity','setMouseCallback','setTrackbarPos','setUseOptimized','setWindowProperty','solve','solveCubic','solvePnP','solvePnPRansac' ,'solvePoly','sort','sortIdx','split','sqrt','startWindowThread','stereoCalibrate','stereoRectify','stereoRectifyUncalibrated','subtract','sumElems'
答案 0 :(得分:2)
不是最顺利的方式,但它对我有用。
@Berak向我解释,正如你在我的问题的评论中所观察到的那样,SIFT算法以及FAST算法已获得专利,这意味着它们不是常规opencv安装的一部分。因此我搜索了一个将拥有它的python发行版 - 我找到了一个。所以,我没有真正解决这个问题,正如@Berak建议的那样,或者我使用Python(x,y)绕过它
感谢您的帮助,
Ozrad
答案 1 :(得分:2)
这让我疯狂,但抓住所有其他建议,结果你现在可以只用两个终端命令获得SIFT和SURF!
请确保您的计算机上没有其他opencv ...
pip uninstall opencv-python
然后获得贡献版本(有SIFT和SURF +其他)......
pip install opencv-contrib-python
它应该安装,但请注意名称有点不同。
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()