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、先检索了报错代码,出现了方案一和方案二中的问题解决方案,这种方案撰写时间是在2018年下半年和2019年出现的,虽然并不是库文件版本越新越好,但是新版本的迭代优化总归是有所成效的。所以没有采用这些方案。

2、检索报错信息中的解决方案:Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'。出现了惊人的效果,真正的解决措施才徐徐拉开序幕.....

该修缮工程比较大,兹另起章节,详见下段 3。

3 修缮工程(攻城)

该修缮工程(实为上文的方案 3 ,在此段展开撰述)为积极攻伐,属为攻城之计。

3.1 下载安装包及工具

3.1.1 CMake

其实这个无所谓版本,我选择最新的。

首先下载 cmake 文件。请依据自己需求 【点击下载】

下载 next - > next 安装,在安装的过程中注意有一项默认 “ 是否添加到PATH ” 默认是就行,要不还要手段添加 PATH。

安装完毕后打开即可。

3.1.2 opencv 被编译对象

之所以下载 opencv 各种包,主要是因为原安装包 .whl 不具备被 CMake 的编译条件,缺少CMakelist.txt 文件。

安装后下载拟编译的文件,由于需要编译的文件中必须包含 CMakeList.txt 文件,(我打开可以被编译的文件发现——每一个被编译的文件夹下面都有一个CMakeList.txt 文件)

先是下载了官网的安装包【点击下载网址,下拉即可看到,由于这个是4.0.0版本的,随着时间延伸,连接可能会失效,失效时候直接去官网就行,我只是将二级目录连接放着了】Documentation、Sources、Win pack (说白了,除了没有 IOS pack 的我都下载了),注意:opencv-4.0.0-vc14_vc15.exe 的安装格式其实相当于解压。

同时为了还下载了 GitHub 上的文件,分别为 opencv 和 opencv_contrib ,

其实,下载 GitHub 上的 opencv 和 opencv_contrib 就可以了。

3.2 编译

3.2.1 编译过程的小插曲(出现的问题)

3.2.1.1 缺少 CMakeLists.txt 文件

由于在编译时不知道是编译的那个文件,同时知道 .whl 文件与 .rar 文件一样,安装和解压类似。所以先找安装文件opencv_python-4.0.1+contrib-cp36-cp36m-win_amd64.whl 练练手。

先将 opencv_python-4.0.1+contrib-cp36-cp36m-win_amd64.whl 文件后缀改为 .rar ,解压后,导入CMake 文件输入路径中,随便输入一个保存路径。点击 Configure 。结果报错!缺少 CMakeList.txt 文件。

3.2.1.2 对比安装前后文件

是不是安装后的文件比安装文件增加了 CMakeLists.txt 文件,所以造成 " 练手 “ 失败。

打开 Everything 软件 --> 键入CMakeLists.txt

发现CMakeList.txt 只存在于 tensorflow 中,安装的 opencv 中压根没有。

3.2.1.2 查找源文件

既然其他文件中存在,而 opencv_contrib_python 中没有,那把 tensorflow 文件中的 CMakeLists.txt 拷贝到 opencv_contrib_python 中是否可行 ?逐一打开CMakeLists.txt 文件,发现内容 “ 非常丰富 ” ,文件存在又多,肯定不是 “ 上上签 ” ;继续踏上“ 征途 ”。

打开 opencv 的官方网站 GitHub 。我们发现包含有 CMakeList.txt 文件。惊喜大门缓缓开启!

3.2.2 编译(失败)

开始就编译 3.2.2.1 opencv-4.0.0-vc14_vc15.exe 解压文件 和3.2.2.2 opencv-4.0.0.zip 解压文件,均失败。这个失败可能不是文件本身造成的,很有可能刚开始 CMake 编译,有些该注意的地方没注意造成的,基于失败的经验,开始编译GitHub 下载的 opencvopencv_contrib 文件。历经波折、终于可以使用了。

3.2.2.1 opencv-4.0.0-vc14_vc15.exe

解压后文件分为

简单地说

build - 其可以直接被使用的,属于成品。将其 “ (D:\Software安装目录) \ opencv ( 解压文件后的根目录 ) \ build \ python \ cv2 \ python-3.6 ” 文件夹中的 cv2.cp36-win_amd64.pyd 文件直接拷贝到 “ (C:\Users\***\AppData\Local\Programs  Python程序的安装目录) \ Python \ Python36 \ Lib \ site-packages ” 文件夹中即可实现 opencv 的使用。

sources - 不能直接作为程序直接使用,属于半成品。打开这个文件夹,可以看到 CMakeLists.txt 文件,而 build 文件中没有该文件。这说明sources 文件中的内容可被 CMake 工具编译。

3.2.2.2 opencv-4.0.0.zip

该文件解压后,也含有 CMakeLists.txt 文件,其实仔细对比 3.2.2.1 opencv-4.0.0-vc14_vc15.exe 中的 sources 文件,文件夹中的内容是一样的。

3.2.3 编译(成功)

3.2.3.1 打开 CMake

3.2.3.2 首先编译基本库 opencv-master

具体入下图

注意:

1、填入路径(browse Source) 的文件夹下必须有 CMakeList.txt 文件。

对比下图,第一幅图是正确的;第二幅图是错误的,会报错。

2 、输出路径是自建的,如果没有该文件夹,CMake 会帮你创建并写入相关文件。

当在最下的窗口中出现如下图所示内容时,待变 configure 成功。

此意味基本库的编译完成

3.2.3.3 再次编译Extra modules(opencv_contrib-master)

在 Search 对话框中输入 PATH  ,或直接输入 OPENCV_EXTRA_MODULES_PATH(不区分大小写),找到 OPENCV_EXTRA_MODULES_PATH 后在 Value 中填入opencv_contrib-master 的文件中的 modules 路径,否则会不成功。

填入后,如下图所示

点击 Configure ,继续运行。

注意:

在该添加地址时,一定要区分好 / \ 两个符号关系。直接复制粘贴的文件路径是 (反斜杠 \)

D:\Software\opencv_contrib-master\opencv_contrib-master\modules

必须将其改为(正斜杠 /)

D:/Software/opencv_contrib-master/opencv_contrib-master/modules

否则会报错。Windows 10 CMake | OPENCV_EXTRA_MODULES_PATH | Bug #11655

CMake Error at cmake/OpenCVModule.cmake:368 (_glob_locations):Syntax error in cmake code atE:/opencv_github/opencv/cmake/OpenCVModule.cmake:368when parsing stringE:\opencv_github\opencv_contrib\modulesInvalid character escape '\o'.
Call Stack (most recent call first):modules/CMakeLists.txt:7 (ocv_glob_modules)

备注:

输出路径不要改变,该图中的输出路径与上图中的输出路径不同是因为我已经编译过了(重新编译很费时间),为了截图显示效果才改变的,输出路径始终不变!!!

同样出现下图,意味 Extend Modules 导入成功!

3.2.3.4 Set OPENCV_ENABLE_NONFREE

这个是要解决的重要事情。

在 Search 栏输入OPENCV_ENABLE_NONFREE,在其值Value中点击选中即可。如下图所示

选择完毕后再点击 Configure 。

3.2.3.5 点击 Generate

直到点击 Generate 才算完成。

(若不进行 Generate ,× 掉 CMake,软件会问你是否保存)

Generate 后暂时先不要关闭 CMake 。待 VS 编译时再关闭。

3.2.3.6 其他

有博客上说可以将 GitHub 下载的 opencv_master 和 opencv_contrib-master 解压到一个文件中进行编译,这个尝试的比较早,失败了。具体的失败原因不知道,也可能是方法可行而具体的细节没处理好造成的;但不排除这种方法本征上是行不通的。

3.2.4 其他

在 CMake 编译的过程中,看文件输出过程可知,其会自动搜寻电脑中的语言工具,如我电脑上是 python 3.6, 它会红色字体显示没有找到 python2.7,找到的是 python 。属于自动匹配吧。如果电脑上装的是 Java,CMake 编译时应该也能搜寻到的。

4 VS 编译

4.1 安装 VS

我安装的最新版本 VS 2019 。

安装 VS2019 之后,打开页面会显示 已安装 / 可用 两个选项,点击可用的最后个人版点击安装即可(由于安装过了,安装前没有截图,只能展示安装后的效果。)。

点击安装后选择 C++ 桌面版,如下图所示

这是我安装个人版之后为了展示效果安装的小型团体的过程步骤。首次选择只需点击 安装 即可。

安装之后关闭就行了。也可以选择性打开。

附:

已安装

可用

4.2 文件编译

一直没有关闭 CMake。点击 CMake 文件中的 Open Project 按钮。如下图所示

点击后跳转到 VS 2019。关闭 CMake,有文件上这样说的,反正没成功的时候都没有关闭 CMake,最后一次把所有问题解决后也看到有这样的博文,就关闭了,具体是否与CMake 有关,不得而知。

选择生成 --> 批生成。

打开批生成对话框

将图中选项选中,并选择 生成 或 重新生成。

(没有细究 生成 和 重新生成的区别,第一次时候选择是生长,后续操作我都选择了重新生成)

中间过程

最后完成 生成,见下图

出现这个情况,也不用惊慌,我尝试,可以使用。

5 使用文件

找到 build 文件夹,找到 cv2.cp36-win_amd64.pyd 文件,我的文件地址 D:\ Software\build\lib\python3\Release

将该.pyd 文件复制到python文件的 site-packages 文件夹中即可。我的文件地址为C:\Users\***\AppData\Local\Programs\Python\Python36\Lib\site-packages

此时可以正常使用 SIFT了。

注意:文件夹中的 cv2.cp36-win_amd64.pyd 文件可以移动,但是编译完成的文件夹既不能修改名称也不能移动,否则会报错,找不到 CV 模块位置。

6 参考

Windows 10 CMake | OPENCV_EXTRA_MODULES_PATH | Bug #11655,解决了输入路径的正斜杠 / 与反斜杠 \ 问题

win7 32位 安装opencv-python后,运行时提示 "from .cv2 import *: DLL load failed: 找不到指定的模块" 的解决办法 感觉有用,其实我没有参考

VS2013+CMake+OpenCV 环境搭建 写的很好,有较多的参考内容

OpenCV4.0 + OpenCV_contrib4.0编译 写的很好,有较多的参考内容

【win+OpenCV3.4.1+opencv_contrib编译】SIFT错误Error: The function/feature is not implemented(表现:报异常)写的很简介,就一句话。

OpenCV3.4.5 安装contrib模块 边吐槽编写

windows 下使用 cmake-gui 来编译第三方库的源代码 给了启发

Windows上使用CMake 有好多CMake的用法可以帮助理解

CMake(二)—— Windows下使用CMake 有启发

cmake: Visual Studio 15 2017 could not find any instance of Visual Studio 当时安装VS 2019,一直启动不了,后来才知道需要启动开发工具采用,只安装VS是不行的,它只是一个平台,比如还可以作为 python 的 IDE

CMake + OpenCV3.4.1 + VS2017静态编译 当时检索到的内容,内容具有一定参考性。

转载于:https://www.cnblogs.com/gengyi/p/10499964.html

OpenCV 学习笔记 06 SIFT使用中出现版权问题error: (-213:The function/feature is not implemented)...相关推荐

  1. 解决OpenCV xfeatures2d_SURF -213:功能/功能未实现。(-213:The function/feature is not implemented) This algorith

    本文解决xfeatures2d_SURF -213问题,也就是SURF,SIRF算法使用xfeatures2d这个的权限问题 问题描述: 问题原因: 解决办法 1.卸载 2.下载安装 3.配置open ...

  2. opencv学习笔记06

    原创:opencv学习笔记06 OpenCV-Python教程:50.理解k-近邻 https://www.jianshu.com/p/404e329e4e80 OpenCV里的kNN 1 2 3 4 ...

  3. OpenCV库使用sift函数,出现“The function/feature is not implemented”问题解决方法

    sift = cv2.xfeatures2d.SIFT_create(),提示如下错误: cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\open ...

  4. OPENCV学习笔记 - SIFT 尺度不变特征变换 Python

    OPENCV学习笔记 - SIFT 尺度不变特征变换 Python 为什么我们需要SIFT尺度不变特征变换? 第一,建立高斯差分金字塔 第二,极值点的精确定位 第三,确定关键点的主方向 第四,构建关键 ...

  5. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

  6. OpenCV学习笔记(四十六)——FAST特征点检测features2D OpenCV学习笔记(四十七)——VideoWriter生成视频流highgui OpenCV学习笔记(四十八)——PCA算

    OpenCV学习笔记(四十六)--FAST特征点检测features2D 特征点检测和匹配是计算机视觉中一个很有用的技术.在物体检测,视觉跟踪,三维常年关键等领域都有很广泛的应用.这一次先介绍特征点检 ...

  7. OpenCV学习笔记(六)(七)(八)(九)(十)

    OpenCV学习笔记(六)--对XML和YAML文件实现I/O操作 1. XML.YAML文件的打开和关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: [c ...

  8. opencv学习笔记11:图像滤波(均值,方框,高斯,中值)

    为什么要使用滤波 消除图像中的噪声成分叫作图像的平滑化或滤波操作.信号或图像的能量大部分集中在幅度谱的低频和中频段是很常见的,而在较高频段,感兴趣的信息经常被噪声淹没.因此一个能降低高频成分幅度的滤波 ...

  9. OpenCV学习笔记(五):Mat结构

    在之前的OpenCV学习笔记(一)用到的几种显示图像的方法中其中一种就是Mat.Mat结构在OpenCV 2.0后才得到广泛应用,相对于OpenCV1.0时代中的IplImage,它有个好处就是不用再 ...

最新文章

  1. Java条形码生成技术-Barcode4j
  2. HDU 2094 产生冠军 (map容器)
  3. mongodb distinct too large用 group
  4. python声音分类_Python音频信号分类MFCC特征神经网络
  5. 如何通俗理解计算机视觉、计算机图形、图像处理之间的区别与联系
  6. 送书 | 222Beta多样性限制性排序CPCoA/CCA/RDA/LDA
  7. 关于C#日期格式化问题
  8. 迭代器之输入和输出迭代器
  9. 通俗易懂的MonteCarlo积分方法(五)
  10. spring 操作对象写入mongo去除_class列
  11. php memcache 扩展 libmemcached 安装
  12. 内存模型以及分区,需要详细到每个区放什么
  13. pandas中关于nan的处理
  14. python分析数据走势图_python绘制趋势图的示例
  15. Mysteel解读:2022年1-10月份马铃薯淀粉进口数据分析
  16. 中兴盒子B860AV1.1-T2版刷公版固件教程
  17. 20瓶可乐java,【Java】Java初级算法基础 ,可乐瓶数问题
  18. 线代[5]|特征值与特征向量、特征值的几何重数与代数重数
  19. 算法设计与分析实验报告验优参考
  20. uni-app外卖页面

热门文章

  1. ASH、AWR、ADDM区别联系
  2. k8s hostname ““ could not be reached
  3. 编译原理--词法分析
  4. 高性能可编程射频移相器介绍
  5. 腾讯收购京东15%股份 易迅、QQ网购等并入京东
  6. 错误信息:FATAL: No bootable medium found! System halted.
  7. HardFault 产生原因
  8. 揭秘阿里巴巴物联网新零售样本-盒马鲜生
  9. IP计算方法!【杨栋胜】
  10. 织梦tag标签静态化