说明
我在windows下使用QT Creator12创建的CMake项目,需要OpenCV的一些功能。由于安装的时候我选择的QT组件都是MInGW的,所以无法使用VS studio版本的dll库。
为什么vs的版本不能用
我安装QT选择的是MinGW版本,本地编译QT工程只能选择MinGW编译方式。选择vs的两个版本无法构建。
根据参考资料里《mingw如何链接vs方式编译生成的动态库?》中的说法,vs的c++ abi是stdcall, 而mingw使用的调用方式是cdecl。也就是说两个编译器的c++ abi不兼容的,故而无法识别对方导出的符号完成链接。
我一开始下载的opencv官方预编译的包,结果一直显示“error: undefined reference to”这样的错误。后来换了MinGW的Opencv库就可以了。
如何下载MinGW编译的Opencv库
首先可以下代码本地编译,如果不想这么麻烦,可以从这里下载:github-huihut/OpenCV-MinGW-Build
如何将OpenCV集成到Qt的工程
我是在windows下创建的Cmake类型的Qt工程。
添加头文件
解压上面下载的Opencv库的包。将include\opencv2目录复制到自己的QT源码目录下
然后在“Header Files”菜单右击,点“Add Existing Directory”, 选择刚刚复制过来的opencv2目录。
然后在CmakeLists.txt中添加opencv2目录的父目录:
target_include_directories (TextFinder PRIVATE ./sdk/inc)
添加库
在解压opencv后找到x64\mingw\bin目录,复制需要的dll模块到自己的工程下,如果没有特别需要,复制三个最常用的就够了。我是复制到我的工程下的sdk目录,复制后如下:
然后在CmakeLists.txt中添加这三个dll的父目录:
target_link_directories(TextFinder PRIVATE ./sdk/)
VS版本的OpenCV预编译库如何下载
我没用,这里仅仅记录下。下载地址在:
https://opencv.org/releases/
选择windows版下载
解压开就有一个build目录,下面有一个opencv_world490.dll。
这个是包含了所有opencv模块的单一库,你需要的就是它。
参考资料Cmake
MinGW编译的Opencv库下载地址:github-huihut/OpenCV-MinGW-Build
mingw如何链接vs方式编译生成的动态库?
How to setup Qt and openCV on Windows
Windows上Qt配置OpenCV(最简单版本无需自己编译-避坑必看)