QT6构建使用OpenCV(MinGW版)

QT6构建使用OpenCV(MinGW版) 说明因为自己最近工作需要使用OpenCV技术此文记录如何使用QT6成功配置环境和使用OpenCV技术。我的QT软件版本QT6.9.2OpenCV版本opencv-4.xGitHub下载链接https://github.com/opencv/opencv百度网盘下载链接https://pan.baidu.com/s/1TNlS6QeNcYlT6AxLcq56uQ?pwdtbi2 提取码: tbi2目录1.构建OpenCV源码2.执行OpenCV安装3.复制关键文件4.验证测试OpenCV1.构建OpenCV源码我们可以在opencv源码同等目录下新建一个文件夹opencv_build作为QT构建文件夹如图QT Creator打开opencv源码项目CMakeLists文件如图打开时记得选择你新建的文件夹opencv_build还是选择release比如我的打开后QT Creator需要加载文件需要等待一会因为源码内容比较多。然后我们需要点开左边项目如图通过过滤器我们找到参数配置以下相应参数选项名称建议操作目的与说明BUILD_TESTS取消勾选 (OFF)不编译OpenCV的测试程序BUILD_PERF_TESTS取消勾选 (OFF)不编译性能测试程序BUILD_EXAMPLES取消勾选 (OFF)不编译示例代码。BUILD_opencv_apps取消勾选 (OFF)不编译OpenCV自带的应用程序BUILD_DOCS取消勾选 (OFF)跳过文档生成步骤节省大量时间BUILD_JAVA取消勾选 (OFF)如果不需要Java接口务必关闭BUILD_opencv_ts取消勾选 (OFF)不编译测试支持模块这是运行测试的基础库BUILD_opencv_world勾选 (ON)将所有模块打包成一个单一的库文件如opencv_world480.dll这在开发和部署时非常方便WITH_OPENMP勾选 (ON)OpenMP是一种广泛使用的并行计算框架可以显著加速OpenCV中许多算法的运算速度强烈建议保留BUILD_opencv_python3取消勾选 (OFF)除非需要python接口否则取消配置完成后就可以build出现如图4apply之后就等待构建编译了时间会有点长~⌚️大概两个小时左右通过编译输出可以观察当前进度2.执行OpenCV安装构建完成之后我们需要执行最后一步的安装操作安装之前我们需要新建一个文件夹opencv-install作为后续安装指定的文件夹CMD打开构建文件夹输入以下命令mingw32-make install DESTDIRD:/OpenCV/opencv-install注意指定路径为自己新建的文件夹路径随后执行安装操作:3.复制关键文件我们新建一个QT_OpenCV文件夹专门用来作为QT调用OpenCV库我们尽量不把安装好的OpenCV头文件和动态链接库复制到QT安装路径最好保持QT安装路径的干净~所以独立新建一个文件夹使用。我们把刚刚安装文件夹下的opencv-install里头文件复制到QT_OpenCV我还需要在QT_OpenCV文件夹新建一个lib文件夹同时把第一步构建的动态链接库放进去4.验证测试OpenCV在QT Creator新建一个C项目OpenCVDemo 我的CMake内容:cmake_minimum_required(VERSION 3.16) project(OpenCVDemo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(OpenCVDemo main.cpp) /*增加这三行代码指明链接OpenCV文件路径*/ set(OPENCV_ROOT_DIR D:/QT_OpenCV) //注意要换成自己的路径 target_include_directories(OpenCVDemo PRIVATE ${OPENCV_ROOT_DIR}/include) target_link_libraries(OpenCVDemo PRIVATE ${OPENCV_ROOT_DIR}/lib/libopencv_world4140.dll.a) include(GNUInstallDirs) install(TARGETS OpenCVDemo LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )主程序main.cpp#include iostream #include opencv2/opencv.hpp using namespace std; using namespace cv; int main() { // 读取图片 Mat img cv::imread(test.jpg); if (img.empty()) { cout Could not read image!; return -1; } cout Image size: img.cols x img.rows; // 转灰度 Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); //高斯模糊 GaussianBlur(gray, gray, Size(3, 3), 0); // Canny 边缘检测 Mat edges; Canny(gray, edges, 50, 150); //创建窗口 namedWindow(Original, WINDOW_KEEPRATIO); namedWindow(Edges, WINDOW_KEEPRATIO); // 显示结果 imshow(Original, img); imshow(Edges, edges); waitKey(0); // 按任意键关闭 destroyAllWindows(); return 0; }注意照片放到执行程序同一个路径下最后展示我是Carpidian~下次见~