opencv 属性错误:模块“cv2.cv2”没有属性“SURF_create”,% 2,模块“cv2.cv2”没有属性“xfeatures2d”

flseospp  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(256)

我正在尝试使用SIFT和Surf。
在我的笔记本电脑上,我有OpenCV version= 4.5.1.48,还添加了OpenCV-contrib-python版本4.5.1.48
我得到一个错误以下的文件SIFT工程完美后,以下的文件,但冲浪不工作,并给我以下的代码错误
代码1

surf = cv.xfeatures2d.SURF_create()   
AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'

代码2

surf = cv2.SURF_create()   
AttributeError: module 'cv2.cv2' has no attribute 'SURF_create'

在阅读了很多关于Stack Overflow的答案之后,我改变了OpenCV的版本,做了很多事情,但没有一件对我有效
我也读到专利到期的消息,但没有什么是工作在我的情况下请告诉我,如果我错了什么地方

ctzwtxfj

ctzwtxfj1#

OpenCV版本= 4.5.1.48
这可能来自pypi,并且不包含任何“非自由”代码
(SURF仍然是专利的,如果你绝对需要,你必须从src(使用contrib模块)构建,使用OPENCV_ENABLE_NONFREE=ON cmake标志)
但是,由于SIFT专利去年到期,因此改用该技术

sift = cv2.SIFT_create() # it's in main, no more xfeatures2d

顺便说一句,不要同时安装**opencv-python和opencv-contrib-python,只安装后者(否则前者会“隐藏”它,并且您不能使用contrib模块。这就是AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'的原因)

dzhpxtsq

dzhpxtsq2#

出于专利原因,opencv 4.5.1.48不包括整个算法
你可以使用Python3.6(或者Python3.7也可以)并安装opencv-pyhton==3.4.2.16opencv-contrib-python==3.4.2.16,然后你可以使用以下函数:
surf = cv2.xfeatures2d.SURF_create()sift = cv2.xfeatures2d.SIFT_create()

相关问题