关于win7+VS2017环境下的opencv-contirb配置的一个坑

问题背景

由于课题需要用到SURF detector, 我依照网上的一下教程,把opencv-contrib的配置了一遍。但是,当我写了一个小demo来测试模块是否能正常使用的时候,程序能正常编译,但是无法调用SURF模块,其中error信息如下图:error提示
error的大致意思是,SURF这个算法现在要收费了,建议我们在cmake的时候设置 OPENCV_ENABLE_NONFREE这个选项,然后再rebuild这个cmake后的导出项目。

如何解决问题?

一开始,我第一个想法就是百度一下这个问题,希望能快速解决这个问题,但是只找到了一篇帖子,地址:https://blog.csdn.net/zhoukehu_CSDN/article/details/83145026

该文提出的解决方案是:在cmake中设置OPENCV_ENABLE_NONFREE,再修改SURF.cpp(在opencv-contrb文件夹中)中的条件编译。但是经过尝试之后,我发现这个方法并不可行,同样会出现上图的error。方案一宣告失败。于是我琢磨,按照error的提示,应该能解决问题才对,肯定是哪里出了问题。于是我又捋一了一遍配置的过程。忽然发现其中一个步骤一直是我忽略的:

在camke过后,我们会rebulild一下导出项目(opencv.sln)。然后把相关项目的dll (D:\opencv3.4\new-build2\install\x64\vc15\bin)文件复制到C:/windows/system32中,system32这个文件夹实际起了一种备胎的作用,当VS不能依照项目配置找到dll文件时,就会在这个文件夹里面找。我的问题就在于,我在后面camake重新配置的过程中,没有把新的dll转移到system32这个文件夹。所以vs读取的,一直都是旧的dll(没有设置OPENCV_ENABLE_NONFREE)。

归纳一下结果方法:

1.重新cmake opencv,opencv-contrib,在配置OPENCV_EXTRA_MODULES_PATH的过程中也要勾上OPENCV_ENABLE_NONFREE

2.重新生成导出项目(opencv.sln)的解决方案,并把新dll文件复制到C:/windows/system32中。

##推荐
最后推荐两篇配置opencv_contrib的文章:

https://blog.csdn.net/qq_23335979/article/details/82115401

https://www.cnblogs.com/jliangqiu2016/p/5597501.html

发布了16 篇原创文章 · 获赞 4 · 访问量 3910

猜你喜欢

转载自blog.csdn.net/qq_33397016/article/details/89765044