【免配置】Qt的mingw_32/64使用编译opencv库
网上在qt中使用mingw编译器配置opencv的时候,通常需要使用cmake编译工具,进行预先编译,步骤比较繁琐,这里推荐一个捷径,直接使用前人编译好的opencv库即可,避免自己再去画时间造轮子。
步骤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库已经安装成功:
不使用灰度图效果如下:
使用灰度图加载