Qt+CMake+opencv经验总结——关于nonfree.hpp和legacy.hpp

先说结论:

如果代码中需要用到nonfree.hpp和legacy.hpp,不要考虑装opencv3及以上版本!直接装opencv2!
下文中有opencv和opencv-contrib的下载链接,由于当时只保存了下载网址,没留下原博csdn地址,如果原博能看到的话请留言,我再添加~

参考的优秀博主链接:
qt+opencv2.4.16.3

进一步,回顾一下之前的曲折历程以及过程中领悟的小细节:

1. Qt5.12.9+CMake+OpenCV4.5.1

  • 最一开始在不了解版本问题的情况下,直接安装了Qt5.12.9+CMake+OpenCV4.5.1,
    参考的优秀博主链接:
    win10系统Qt5.12.9配置OpenCV4.5.1

编译、安装、加环境变量,运行demo后,

#include 
#include "opencv2/highgui/highgui.hpp"

头文件编译无误,但是

#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/legacy/legacy.hpp"

这两个头文件找不到。直接进行查询也没有这两个.hpp。

2. Qt5.12.9+CMake+OpenCV4.5.1+OpenCV-contrib 4.5.1

进一步查找,发现是opencv3及以上久直接没有这两个内容(这里本人用于提取特征点的方法),3以上部分移动到了扩展包—opencv-contrib,因此就准备变动小一点,加个补丁,准备加安装opencv-contrib

参考的优秀博主链接:
opencv opencv-contrib下载国内镜像
Qt Creator5.12配置OpenCV4.3.0和opencv_contrib扩展包

安装中在powershell编译时,出现了报错,找不到.dll文件,查找文件夹后发现有对应名称的.dll.a文件,只是.dll文件缺失。查找发现解决方法如下:

  • 直接找名称对应的dll文件并下载,放到路径内;
  • 特别问题特别分析,有的文件缺失有经验贴,可以通过其它文件的修改补足;
  • (在我的问题不但查不到而且下不到的情况下)尝试了直接把.dll.a文件后缀改掉,变成.dll`文件,再编译时确实不报错了。但是不知道后面有没有坑

注意opencv-contrib要安装与opencv对应的版本。安装完毕后发现,运行时

#include "opencv2/nonfree/nonfree.hpp"
#include "opencv2/legacy/legacy.hpp"

这两个头文件依然找不到。
通过查找之后发现,opencv-contrib4.5.1中含有nonfree.hpp,但是其路径不再是opencv2/nonfree/nonfree.hpp,因此需要自己查找一下,更改路径;legacy.hpp是完全找不到

进一步,下载了opencv-contrib3.1,来查看是否含有legacy.hpp。下载完之后发现opencv-contrib3.1也没有legacy.hpp…

结论

至此大概可以得出结论:
如果程序中需要用到legacy.hpp,那直接选择opencv2;
如果程序中需要用到nonfree.hpp,可以选择使用opencv2,或者opencv3以上+对应版本的ooencv-contrib,但注意修改nonfree.hpp的路径。

tips

另外tips:
使用cmake编译opencv3及以上的版本和opencv2略微有区别,主要在于cmake的文件夹路径(opencv2进去之后没有分开的build和sources文件夹,直接自己新建build,整体路径为sources)以及.pro文件中的内容:

  • opencv2的路径添加:
    Qt+CMake+opencv经验总结——关于nonfree.hpp和legacy.hpp_第1张图片
  • opencv4的添加:
INCLUDEPATH += D:\OpenCV4.5.1\opencv\opencv-build\install\include
LIBS += D:\OpenCV4.5.1\opencv\opencv-build\lib\libopencv_*.a

你可能感兴趣的:(视觉,opencv,视频处理)