一、准备
OpenCV官网提供了动态库的安装包,但是只有64位,而且没看到编译参数,如果需要32位或者静态链接还是得自己编译。
CMake:https://cmake.org/download/
Visual Studio:https://visualstudio.microsoft.com/zh-hans/downloads/
Visual Studio老版本:https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
OpenCV:https://github.com/opencv/opencv
OpenCV扩展: https://github.com/opencv/opencv_contrib
OpenCV和OpenCV扩展要下一样的版本,直接在Release列表里找同一个版本即可。
未使用CUDA,略。
二、构建
先用CMake-gui工具生成VS的工程文件。
选择OpenCV源码路径,设置输出路径,然后点Configure:
第一次Configure时需要设置编译器:
然后是漫长的等待,他会自动下载一些第三方的依赖,我下了半天。也可以自己下载,如ffmpeg可以在github找opencv_3rdparty仓库,选择对应分支下载放到输出目录的3rdparty/ffmpeg中。
Configure结束后列表中会显示编译选项,我们修改后需要重新Configure一下。
常用的一些选项:
OPENCV_EXTRA_MODULES_PATH:指定到contrib扩展库路径下的modules目录
OPENCV_ENABLE_NONFREE:开启非免费功能,工作项目勿用
BUILD_opencv_world:将各个模块生成到一个world库文件中
BUILD_SHARED_LIBS:勾上为动态库,取消为静态库
BUILD_WITH_STATIC_CRT:勾上为/MT,取消为/MD
BUILD_WITH_DEBUG_INFO:生成调试符号文件
Qt安装版是/MD的动态链接,所以我选择一样的设置。之前遇到过别人VS2022静态编译的OpenCV我VS2019没法用,缺了VS2022的运行时库。
还有一些多余的设置,用不上可以搜索然后取消勾选,比如其它语言的绑定、测试等:
设置好后重新Configure,没报错就点Generate生成VS工程,然后点Open打开工程。这个工程文件在上面我们设置的输出目录下。
在VS中我们选择好Debug或者Relase,然后在CmakeTargets下的All_BUILD右键点击生成,生成完了再INSTALL右键点生成,就会在输出目录生成一个install文件夹。
install文件夹里有库文件和头文件:
我们先写个Demo测试一下。
三、使用
在VS中使用动态库要设置包含目录(VC++目录设置或者C++/常规设置)、库目录(VC++目录设置或者连接器/常规设置)和库文件。
如果懒得把dll拷到exe或者工作目录下,可以设置调试环境变量:
PATH=XXXX;%PATH%
测试代码:
// #include "opencv2/opencv.hpp"
cv::Mat canvas = cv::Mat::ones(cv::Size(200, 200), CV_8UC3);
cv::rectangle(canvas, cv::Rect(50,50,100,100), cv::Scalar(0, 0, 255), 2);
cv::imshow("canvas", canvas);
cv::waitKey(0);
运行效果: