天天看點

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

點選上方藍字關注我們

微信公衆号:OpenCV學堂

關注擷取更多計算機視覺與深度學習知識

QT在Windows上安裝好之後,正常會兩種編譯器選擇分别是:

-VS2015/2017/2019....-mingw
           

因為我安裝了VS2015,是以一直是預設VS來編譯,但是發現當從VS編譯切換到mingw時候,OpenCV的windows版本就無法正确的使用了。這個時候要求首先通過mingw來編譯OpenCV的源碼,重新生成OpenCV庫檔案與dll檔案。本文就詳細記錄了這個過程。而且最後通過編譯好的OpenCV內建配置QT開發環境,實作了一個簡單的測試程式。

軟體版本與環境配置

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

版本資訊

Windows10 64位QT5.13 64位OpenCV4.2CMake3.17.1
           

下載下傳位址:

https://opencv.org/opencv-4-2-0/ https://cmake.org/
           

環境配置

在安裝好QT,CMake與OpenCV下載下傳解壓縮之後,首先到QT的目錄下,找到mingw編譯工具的bin目錄,添加到系統環境變量中去,本人安裝好的QT中mingw工具的bin目錄路徑如下:

D:\Qt\Qt5.13.1\Tools\mingw730_64\bin
           

編譯OpenCV源碼

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

編譯OpenCV源碼主要分為如下幾步:

01

cmake配置與生成

輕按兩下打開安裝好的cmake

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

 選擇好souce路徑與build路徑,本人的分别為:

D:/opencv-4.2.0/opencv/sourcesD:/opencv-4.2.0/opencv/newbuild
           

然後點選 【configure】,就會彈出如下對話框,請選擇mingw makefiles

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

然後分别設定

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範
C編譯器D:\Qt\Qt5.13.1\Tools\mingw730_64\bin\gcc.exe C++編譯器D:\Qt\Qt5.13.1\Tools\mingw730_64\bin\g++.exe
           

運作完成之後,參見如下選項進行配置

- 勾選 WITH_OPENGL- 勾選 WITH_OPENMP- 勾選 BUILD_opencv_world- 不勾選 WITH_OPENCL_D3D11_NV
           

然後再點選【generate】按鈕,執行完成即可。

注意

這個過程中你最有可能遇到的錯誤就是無法下載下傳ffmpeg庫的問題,解決方法也很容易,讓可以下載下傳的人給你下載下傳,然後直接copy到你的opencv\sources\3rdparty\ffmpeg目錄下即可。然後再次點選【generate】按鈕即可。

02

生成安裝檔案

cmake完成之後,打開cmd,切換到build目錄下,首先執行如下的指令行參數

mingw32-make -j 8

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

回車之後,就看到如下開始執行了,畫面如下:

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

大概5~10min左右(取決電腦速度)如果沒有報錯,就會到達100%完成。然後執行下一個指令行參數

  mingw32-make install  

大概在幾十秒即可很快執行完成,執行完成之後你就會在這個目錄得到編譯好的庫與dll檔案。

D:\opencv-4.2.0\opencv\newbuild\install
           

很直接的把生成的dll所在路徑添加到環境變量中,這裡為:

D:\opencv-4.2.0\opencv\newbuild\install\x64\mingw\bin
           

使用OpenCV+QT實作圖像顯示

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

通過一個簡單的OpenCV讀取圖像,在QT中QLabe顯示來驗證上述編譯好的庫可以使用。直接通過QT Creator來建立一個QT Application程式,導入OpenCV庫依賴(不知道怎麼操作,請看結尾的連結,通過視訊學習即可!),然後在mainwindow.cpp中實作如下代碼:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"
#include "QHBoxLayout"
#include "QLabel"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QHBoxLayout *layout = new QHBoxLayout(ui->centralwidget);
    QLabel *label = new QLabel();
    layout->addWidget(label);
    cv::Mat mat = cv::imread("D:/images/pedestrain_01.jpeg");
    cv::cvtColor(mat, mat, cv::COLOR_BGR2RGB);
    QImage img = QImage(mat.data, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
    int w = img.width();
    int h = img.height();
    if(w > 800 || h > 800) {
        double rate = 800.0 / std::max(w, h);
        int nw = static_cast<int>(rate * w);
        int nh = static_cast<int>(rate * h);
        img = img.scaled(QSize(nw, nh), Qt::KeepAspectRatio);
    }
    QPixmap mp;
    mp=mp.fromImage(img);
    label->setPixmap(mp);
    label->setAlignment(Qt::AlignCenter);
    mat.release();
}

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

記得建立項目的選擇編譯器為mingw啊,然後選擇建構為release。直接運作,顯示如下:

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範

最後怕寫的不太好,給大家錄了個實操的視訊,教大家如下一步一步基于QT搭建OpenCV開發環境。

B站視訊版本

https://www.bilibili.com/video/BV1Za4y1v7ra

 推薦閱讀 

OpenCV4系統化學習路線圖-視訊版本!

五分鐘搞定OpenCV4 + QT5內建與代碼測試

OpenCV4.2 + OpenVINO2020安裝配置與應用示範

OpenVINO深度學習推理架構 開發技術系列文章彙總

單應性矩陣應用-基于特征的圖像拼接

OpenCV圖像拼接改進算法之完美拼接

幹貨 | 基于特征的圖像配準用于缺陷檢測

OpenCV | 二值圖像分析的技巧都在這裡

OpenCV二值圖像分析之形态學應用技巧

圖像色彩空間與應用轉換

五分鐘學會C++高效圖表繪制神器調用

沒想到圖像直方圖有這麼多應用場景

基于灰階共生矩陣(GLCM)的圖像紋理分析與提取

OpenCV中一個最容易搞錯的形态學操作

OpenCV+OpenVINO實作人臉Landmarks實時檢測

OpenCV4+OpenVINO實作圖像的超分辨

利用單應性矩陣實作文檔對齊顯示

c++ 編譯添加dll_使用MinGW編譯OpenCV4源碼與配置使用示範