1. 程式人生 > >OpenCV與QT聯合開發示例

OpenCV與QT聯合開發示例

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聯合開發示例