一、环境介绍

本文使用环境为:win11、opencv-4.8.0-windows、cmake-3.29.0-windows-x86_64、Qt5.14.2 MinGW64位

opencv下载地址:https://opencv.org/releases/ 

可以下载exe.修改后缀位zip文件 然后解压,则可以获得源码和对应的msvc版本的opencv库

cmake下载地址:CMake 安装与配置 | 菜鸟教程Download CMakeCMake 安装与配置 | 菜鸟教程

下载zip解压即可

二、设置系统变量

本文中使用的环境变量如下,需要根据自己实际情况进行配置,主要设置cmake路径和mingw的gcc和g++路径

cmake:E:\tools\cmake-3.29.0-windows-x86_64\bin
Qt的Mingw64:C:\Qt\Qt5.14.2\Tools\mingw730_64\bin

配置环境变量可以采用两种方式:

1.直接配置电脑的系统环境变量,如下图所示(下图源于连接:基于QT+cmake编译opencv_cmake 编译opencv-CSDN博客):

通过系统搜索编辑系统环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.通过cmake工具完成配置,这样仅针对于该项目实现环境变量配置,本文采用这种方式配置,下面第三节会有介绍:

三、配置cmake,编译opencv

配置configure,选择MinGW Makefiles,点击Specify native compilers自定义编译器,再next

配置gcc和g++位置 ,在此目录下:C:\Qt\Qt5.14.2\Tools\mingw730_64\bin

 如果没有设置系统环境变量会报错 ,错误如图:

则需要按照如下方式完成环境变量的配置

这个环境变量后面加上上面的提到的cmake和mingw的路径

 

 

等待Configuring done后出现红色区域,选中WITH_OPENGL和WITH_QT,再次点击Configure

 

配置entry,点击Add Entry,输入name为OPENCV_VS_VERSIONINFO_SKIP,Type选择BOOL,Value选中


Configure完毕后将设置本地安装的QT路径,以后编译QT项目时候使用到的文件查找路径,设置完毕后再次Configure,直至没有红色区域,点击Generate生成Makefile,完成后显示“Generating done”

提示Configuring done标识配置完成,点击Generate生成Makefile,等待显示Generating done 

在生成编辑文件目录打开cmd,输入mingw32-make -j 8,-j 8表示使用8个线程编译,速度更快

mingw32-make -j 8

如果提示 mingw32 找不到 则是因为没有配置系统环境变量的原因,则需要使用如下程序去打开对应的目录 输入mingw32-make -j 8

1.本次遇到的报错问题 ,这里报错不容易看到的时候可以去掉多线程编译,就可以知道报错位置

opencv 编译报错: error: temporary of non-literal type 'google::protobuf::internal::CallOnceInitializedMutex<std::mutex>' in a constant expression

原因是gcc版本太低导致:

在Opencv源代码中修改: opencv-4.5.5\3rdparty\protobuf\src\google\protobuf\stubs\mutex.h

重新编译即可,后面又别的报错可以相互交流!

成功编译后执行安装命令mingw32-make install

mingw32-make install

安装完成后出现install文件夹
 

四、使用opencv

创建新工程,工程文件引入opencv动态库

# 链接 OpenCV 库
LIBS += E:/opencvWorkspace/opencv-4.8.0-windows/opencv/buildMinGW/install/x64/mingw/lib/libopencv_*.dll.a

INCLUDEPATH += E:/opencvWorkspace/opencv-4.8.0-windows/opencv/buildMinGW/install/include
DEPENDPATH += E:/opencvWorkspace/opencv-4.8.0-windows/opencv/buildMinGW/install/include

main.cpp

#include "widget.h"

#include <QApplication>
#include <opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
#include<stdio.h>
using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    cv::Mat mat = cv::imread("E://testimage//bg.jpg");
        if(mat.empty()){
            return false;
        }
        cv::Mat image;
        cv::cvtColor(mat,image,CV_BGR2RGB); //彩色显示
        cv::imshow("Image",mat);
    return a.exec();
}

正常构建,运行

本文按照下面参考链接去完成的,记录过程用于学习

参考链接:基于QT+cmake编译opencv_cmake 编译opencv-CSDN博客

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐