1 错误原因
1.1 报错全部信息:
cv2.error: OpenCV(4.0.1) D:\Build\OpenCV\opencv_contrib-4.0.1\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘cv::xfeatures2d::SIFT::create’
1.2 报错信息分解:
1、 cv2.error: OpenCV(4.0.1) D:\Build\OpenCV\opencv_contrib-4.0.1\modules\xfeatures2d\src\sift.cpp:1207:
错位代码定位
2、 error: (-213:The function/feature is not implemented)
error 代号,函数 / 功能无法实现
3、 This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘cv::xfeatures2d::SIFT::create’
error 信息,该算法(SIFT)已经获得专利,在此配置中不包括,设置 OPENCV_ENABLE_NONFREE CMake 选项并在函数 ‘ cv :: xfeatures2d :: SIFT :: create ‘ 中重建库
2 修缮工程(守城)
该修改工程属于消极防御,记为守城之策。
2.1 方案一:安装opencv-contrib-python
采用 opencv-contrib-python 而非 opencv-python 。在 opencv-contrib-python 版本中含有额外模块( Extra modules ),而 opencv-python 版本中只含有基础模块。
网上有人说是 SIFT 申请了算法专利保护,所以就将 SIFT 放置在了 Extra modules 模块中,故安装 opencv-contrib-python 是能用的。
当然这个说法也是对的,官网【点击查看】上确实看到 Extra modules 中包含有 xfeatures2d. Extra 2D Features Framework 函数 / 功能。
2.2 方案二:版本问题
有人按照方案一操作,依据不可行,所以又出现了版本问题,确切地说 opencv-contrib-python 3.4.3.18之前是有效的。因为我在寻找解决办法时,好多解决办法都是降低版本至 3.4.3.16。完美解决该问题。但 – 但 – – 但 – – – 但这是2019 年 03 月 09 日。
由于我想的是越高的版本其算法应该会越好,bug 应该也越小。所以不想降低版本来实施运算;所以这个解决方案没有采用。
网上到处都是赋值粘贴的,也不注明出处。
2.3 方案三:按照报错信息去解决
写下一段插曲,算是反思吧。
查找原因顺序是,
1、先检索了报错代