OpenCV與QT聯合開發示例
阿新 • • 發佈:2018-09-15
http 機會 資料 使用 對象 enc 導入 測試 activity
1、OpenCV及QT開發環境搭建
windows基於vs2017的opencv安裝
windows下安裝QT並與visual studio 2017搭建開發環境
2、工程創建
1、導入Qt項目
選擇:QT VS Tools->Open Qt Project File(.pro)…
2、新建Qt項目
1、選擇:文件->新建->項目->測試->Qt GUI Application,輸入工程名,下一步…進行新建。
2、“next”下一步
3、選擇依賴的模塊:最基礎的QtCore、QtGui、QtWidgets還有一些音/視頻、網絡、數據庫、XML、OpenGl相關的模塊,需要使用的直接勾選即可。
4、finish(具體設置以後有機會在寫)
3、OpenCV工程創建
1、 選擇test.ui -> 打開方式 -> Qt Designer -> 確定
2、 拉一個OPenGL控件到窗體上
3、 改控件名字為mat->在對象查看器中選中控件——>右鍵選擇提升為...
4、 提升的類名稱:MatView -> 點擊添加 ->提升 -> ctrl + F 保存界面 ,如下圖
5、 Header Files右鍵 -> 類導向 -> 添加類 -> 類命:MatView -> 完成 -> 確認,如下圖
6、點擊添加類
7、點擊應用並確定
8、 MatView.h代碼
#pragma once //導入相應的庫 #include <QOpenGLWidget> //繼承QOpenGLWidget class MatView :public QOpenGLWidget { Q_OBJECT public: //構造函數 MatView(QWidget *p); ~MatView(); //重載一個函數 void paintEvent(QPaintEvent *e); };
9、 MatView.cpp代碼
#include "MatView.h" #include<opencv2/core.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/imgcodecs.hpp> #include <QImage> #include <QPainter> using namespace cv; //重載一個函數,只要窗口發生變化他都會調用,這個函數不能處理業務邏輯,只做處理圖像 void MatView::paintEvent(QPaintEvent *e) { Mat src = imread("D://1.jpg"); QImage img(src.data, src.cols, src.rows, QImage::Format_RGB888); QPainter painter; painter.begin(this); painter.drawImage(QPoint(0, 0), img); } //構造函數,調用父類的,因為父類還有處理在裏面,所以要調用它 MatView::MatView(QWidget *p) :QOpenGLWidget(p) { } MatView::~MatView() { }
10、 main.cpp代碼不用改動
11、 導入OpenCV庫,參照windows基於vs2017的opencv安裝
12、 運行代碼
代碼不重要,重要是如何配置,直接運行代碼,可能因為系統+環境不同出錯
13、 效果圖
參考資料:
11.VS2015+OpenCV3.2+QT軟件/插件(QT篇1) --- OpenCV從零開始到圖像(人臉 + 物體)識別系列
OpenCV實例精解
OpenCV與QT聯合開發示例