我正在尝试像
这样简单的事情sift = cv2.SIFT()
并得到这个错误的错误
赛道(最近一次呼叫最后一次): 文件" C:\图像处理\ featurematching2.py",第9行,in sift = cv2.SIFT() AttributeError:'模块'对象没有属性' SIFT'
我不明白,因为安装了cv2。
cv2.version是 ' 3.1.0'
我的系统是windows8.1 64bit 我的python程序2.7.12和opencv 3.1.0
也许某人有同样的问题可以帮助我
非常感谢
答案 0 :(得分:2)
在OpenCV 3中,已经进行了更严格的分离,以区分专有和非专有功能(也是免版税而非免费)。 SIFT和SURF都是专有算法(而不是免版税),因此不会与OpenCV 3的默认安装(您在发行版的存储库中找到的那个)一起分发,除非它在分发专有内容时没有问题。 / p>
要访问此类专有功能,您需要通过编译 contrib 模块从源代码构建它们。我从来没有偶然发现这个问题因为我总是从源代码构建OpenCV(至少从3.0版本开始)所以我总是选择我认为我将使用哪些功能并相应地构建它们。
详细说明here。 contrib模块就是您所需要的。我个人建议至少编译一次OpenCV,这样你就可以更好地了解它的位置。
请注意以下内容 - 如上所述,SIFT是专有的,而非免版税。有关详细信息,请参阅this discussion。基本上如果你在家里或在学校做有趣的项目,你很高兴。但是,当您开始将这些作为公司项目的一部分或通常用于商业用途时,您必须兑现。
最后但同样重要的是,opencv_contrib
模块还包含不够稳定且无法包含在主程序包中的功能。