python - OpenCV Python 不能使用 SIFT

标签 python opencv

我正在尝试一个简单的事情,比如

sift = cv2.SIFT()

并得到这个错误

赛跑(最近一次通话最后):
文件“C:\image processing\featurematching2.py”,第 9 行,在
筛选 = cv2.SIFT()
AttributeError:“模块”对象没有属性“SIFT”




我不明白,因为安装了 cv2。

cv2.version 是
'3.1.0'

我的系统是windows8.1 64bit
我的 python 程序 2.7.12 和 opencv 3.1.0

也许有人有同样的问题,可以帮助我

多谢

最佳答案

在 OpenCV 3 中,为了区分专有和非专有功能(也是免版税和非免费),进行了更严格的区分。 SIFT 和 SURF 都是专有算法(不是免版税),因此不随 OpenCV 3 的默认安装一起分发(您可以在发行版的存储库中找到它,除非它在分发专有东西方面没有问题)。

为了访问这些专有特性,您需要通过编译 从源代码构建它们。贡献模块。我从来没有偶然发现过这个问题,因为我总是从源代码构建 OpenCV(至少从 3.0 版开始),所以我总是选择我认为我将使用哪些特性并相应地构建这些特性。

提供详细说明here . contrib模块就是你所需要的。就我个人而言,我建议至少编译一次 OpenCV,以便您可以更好地了解在哪里。

请注意以下内容 - 如前所述,SIFT 是专有的,不是免版税的。见 this discussion更多细节。基本上,如果你在家里或学校做一些有趣的项目,你就可以开始了。但是,当您开始将这些作为公司项目的一部分或一般用于商业用途时,您必须兑现。

最后但并非最不重要的 opencv_contrib模块还包含不够稳定的功能,无法包含在主包中。

关于python - OpenCV Python 不能使用 SIFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514202/

相关文章:

python - Pandas groupby 和 value_counts

c++ - 如何在OpenCV中限制float类型Mat精度?

opencv - 尝试使用任何 CUDA 功能时出现段错误

opencv - 使用openCV copyTo函数时用255初始化矩阵?

c++ - 如何将 boost::geometry::distance 与 opencv cv::Point 一起使用?

python - 为什么向二等分函数添加 `reversed` 参数被认为效率低下?

python - 如何按列自动过滤行

python - 在 Python 单元测试中模拟 NamedTemporaryFile

Python:比较更多数字

c++ - C++ 中的均值偏移实现