前言
? ? ? ? 本文主要分享QT的兩種編譯器環境(MSVC和MinGW)下,安裝及引入opencv的方法。
編譯器區別
特性?? | ??MSVC?? | ??MinGW?? |
---|---|---|
??編譯器類型?? | 微軟專有編譯器(cl.exe ) | 基于GCC的開源工具鏈 |
??平臺支持?? | 僅Windows | 跨平臺(Windows/Linux/macOS兼容) |
??運行時庫?? | Microsoft CRT(如ucrt 、vcruntime ) | GNU標準庫(glibc或其變體) |
??異常處理?? | 結構化異常處理(SEH) | 標準C++異常(try-catch ) |
??多線程模型?? | 原生Win32線程API | 支持POSIX線程或Win32線程 |
??調試工具?? | Visual Studio強大圖形化調試器 | GDB命令行調試,功能較弱 |
??第三方庫兼容性?? | 需MSVC編譯的庫(.lib /.dll ) | 需MinGW編譯的庫(.a /.dll.a ) |
????????????????????????????????????????????????(以上內容來源于網絡)
????????簡單的說就是,MinGW編譯器是QT通用編譯器,適合做跨平臺遷移,比如Linux的QTcreator編譯OK的代碼(只要要沒有專門調用linux特性的函數),移植到window時,在MinGW編譯器下都能編譯通過,本人分享的很多源碼,都是可以在linux/window編譯通過。
????????而MSVC編譯器是深度集成了Windows API,比如用visual Studio開發的C++項目,可以很容易的轉化為QT項目(處理一些類型,把鏈接庫寫到.pro文件中)。
? ? ? ? 另外提醒一個坑點,MinGW編譯器的代碼是可以使用#include<window.h>來使用Windows API,但是會缺少很多接口,或者是接口無效,而MSVC編譯器使用#include<window.h>可以調用全部的Windows API(等效于visual Studio調用API)。
安裝前簡要說明
? ? ? ? 本文使用的是opencv官網編譯好的安裝程序,這個程序是在MSVC下編譯的,所以QT MSVC編譯器版本安裝比較簡單;而QT MinGW編譯器版本,可以下載源碼后重新編譯(麻煩),或者是使用中間件接口來調用MSVC的接口(簡單),本文只介紹簡單的方式。
QT安裝opencv環境
MSVC編譯器
待安裝軟件
opencv安裝包:opencv-4.5.2-vc14_vc15.exe? ?
?如果要使用其他更新的包,可以訪問官網地址:https://opencv.org/releases/?
安裝操作
1、應用安裝
點擊安裝包之后,只需要填入安裝路徑即可,如下圖,本人安裝在D:\software\opencv目錄下
2、環境變量設置
安裝完成之后,需要配置系統環境變量,方便QT項目引用
3、QT項目引入opencv庫
以上加上環境變量包含之后,不需要重啟電腦,直接創建一個MSVC編譯器的QT項目,然后右鍵點擊項目,在右鍵菜單中選擇【添加庫...】
選擇外部庫,進入下一步
然后填寫上庫文件路徑和頭文件目錄路徑,如下圖填寫
創建完成之后,在.pro文件中,可看到新增了如下內容
如果嫌棄這種添加方式操作步驟多,可以在opencv目錄下,創建一個openvb.pri文件,把上面導入外部庫生成的.pro內容剪切出來,粘貼到opencv.pri中,然后改一下路徑(去掉../.../),然后在.pro文件中引入pencv.pri文件即可(以后的項目需要opencv庫時,只需要引入這個文件即可)
include(D:\opencv\opencv.pri)
測試代碼
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);Mat image=imread("D:/123.png");namedWindow( "show", WINDOW_AUTOSIZE );imshow("show",image);
}
以上測試代碼是兩個編譯器通用的
MinGW編譯器
待安裝軟件
opencv安裝包:opencv-4.5.2-vc14_vc15.exe? ? ?這個是必須安裝的。
接口中間件:OpenCV-MinGW-Build-OpenCV-4.5.2-x64?這個一定要選擇跟以上一樣的4.5.2版本,可以選擇其他的版本,但是兩個安裝包的版本一定要一樣。
安裝操作
1、應用安裝
opencv安裝包,與MSVC編譯器的安裝完全一樣
2、接口中間件安裝
也安裝到D:\software\opencv目錄下,方便管理
3、環境變量設置
在path中加入接口中間件的路徑
D:\opencv\opencvMinGW\OpenCV-MinGW-Build-OpenCV-4.5.2-x64\x64\mingw\bin
4、QT項目引入opencv庫
這里直接加入opencv.pri文件(可以改名為opencvMinGW.pri),以下是.pri文件的內容:
# 頭文件路徑
OPENCV_ROOT = $$PWD/opencv/opencvMinGW/OpenCV-MinGW-Build-OpenCV-4.5.2-x64
INCLUDEPATH += $$OPENCV_ROOT/include# 庫鏈接配置(標準-l語法代替絕對路徑)
OPENCV_LIB_PATH = $$OPENCV_ROOT/x64/mingw/bin
LIBS += -L$$OPENCV_LIB_PATH \-lopencv_core452 \-lopencv_highgui452 \-lopencv_imgproc452 \-lopencv_calib3d452 \-lopencv_imgcodecs452 \-lopencv_videoio452
然后在.pro文件中引入.pri文件即可
include(D:\opencv\opencv.pri)
5、測試代碼
與MSVC的測試代碼完全一樣。
篇尾
? ? ? ? 之前分享的動態庫編譯文章中,有說明過不同qt版本編譯出來的so、dll不能通用(相同的編譯器也不行),何況是編譯器不一樣的時候,所以QT項目(MinGW編譯器)引入opencv,要么重新編譯,要么使用接口中間件。