【免配置】Qt的mingw使用编译opencv库

【免配置】Qt的mingw_32/64使用编译opencv库

网上在qt中使用mingw编译器配置opencv的时候,通常需要使用cmake编译工具,进行预先编译,步骤比较繁琐,这里推荐一个捷径,直接使用前人编译好的opencv库即可,避免自己再去画时间造轮子。

案例工程文件仓库

本人测试了4.0.1在qt中可以使用debug和release运行程序,但是4.5.2只能使用release运行程序

步骤1:下载对应编译完成的opencv库文件
仓库地址 https://gitcode.net/mirrors/huihut/opencv-mingw-build
在这里插入图片描述
将下载完成的压缩包解压到Qt安装目录的同级目录下:
在这里插入图片描述
在这里插入图片描述
步骤2:添加系统环境变量
注意:在添加环境变量的时候,如果电脑中有多个版本的opencv库, 则一定要将此版本的opencv版本放置在其他opencv版本的前面
在这里插入图片描述
在这里插入图片描述
环境变量配置完成之后,可以重启电脑一下。

步骤3:添加Qt测试工程
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
注意:这里的路径一定要和自己压缩包解压的路径以及环境变量中的路径一至

INCLUDEPATH += E:/Qt/OpenCV-MinGW-Build-OpenCV-4.0.1-x64/include
               E:/Qt/OpenCV-MinGW-Build-OpenCV-4.0.1-x64/include/opencv2
LIBS +=  E:/Qt/OpenCV-MinGW-Build-OpenCV-4.0.1-x64/x64/mingw/lib/lib*.a

下面是工程中需要的文件
widget.h中配置如下
在这里插入图片描述

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFileDialog>
#include <QMessageBox>
#include <opencv2/opencv.hpp>
using namespace cv;

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    
    
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    Mat img_input; //原始图片
    Mat gray_img; //灰度图片
    int isGray = 0; //判断是否设置为灰度图

private slots:
    void on_pushButton_clicked();

    void on_checkBox_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H


widget.c文件中
在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    
    
    ui->setupUi(this);
}

Widget::~Widget()
{
    
    
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    
    
    QString filename=QFileDialog::getOpenFileName(this,"打开图像文件","Image File(*.bmp;*.png;*.jpg)");
       if(filename == "")
       {
    
    
           QMessageBox::information(this,"提示","文件打开失败!");
           return;
       }
       img_input = cv::imread(cv::String(filename.toLocal8Bit().toStdString()));
       if(img_input.empty())
       {
    
    
           QMessageBox::information(this,"提示","文件打开失败!");
           return;
       }
       cvtColor(img_input, gray_img, COLOR_BGR2GRAY);

       Mat temp;
       QImage qImg;

       if (!isGray)
       {
    
    
           cv::cvtColor(img_input,temp,COLOR_BGR2RGB);
           qImg = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
       }
       else
       {
    
    
           cvtColor(gray_img, temp, COLOR_GRAY2RGB);//GRAY convert to RGB
           qImg = QImage((const unsigned char*)(temp.data), temp.cols, temp.rows, temp.step, QImage::Format_RGB888);
       }
       ui->label->setPixmap(QPixmap::fromImage(qImg));
       ui->label->setScaledContents(true);

}

void Widget::on_checkBox_clicked()
{
    
    
    if (ui->checkBox->isChecked())
        {
    
    
            isGray = 1;
        }
        else
        {
    
    
            isGray = 0;
        }
}


运行程序,点击pushButton按钮,添加一张测试图片,如下,说明opencv库已经安装成功:
不使用灰度图效果如下:
在这里插入图片描述
使用灰度图加载
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44236302/article/details/131126895