问题描述
在Jupyter Notebook的conda虚拟环境下,使用cv2实现SIFT算法。由于cv2申请专利,无法调用xfeatures2d.SIFT_create()。
报错提示:(-213:该功能/特性尚未实现)此算法已获得专利,在此配置中被排除
;在函数中设置OPENCV_ENABLE_NONFREE CMake 选项并重新构建库
解决方案及其分析
在较高版本的OpenCV中无法调用SIFT算法相关的函数,是由于该算法已被申请专利。可以通过 降低OpenCV的版本
解决该问题。
为了降低OpenCV的版本,需要卸载当前版本,然后安装低版本的 opencv-python
和 opencv-contrib-python
。
# 卸载当前版本的OpenCV
pip uninstall opencv-python
pip uninstall opencv-contrib-python
# 安装低版本的OpenCV (在Python 3.6下的OpenCV 3.4.2.16)
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
解决过程小记
最开始是在虚拟环境 cv_course 下进行尝试的,并且考虑导可能会出现 Python版本不支持OpenCV部分版本
的情况。因此在排查的时候可以首先看Python的版本,然后查看可用的OpenCV版本。
1.查看当前虚拟环境的 Python 版本
# 使用conda info命令查看当前虚拟环境的信息
conda info
2.查看当前可用的OpenCV版本