[Tutorial OpenCV Qt] OpenGL Widget per visualizzare immagini da OpenCV in una GUI con Qt (Seconda Parte)

Dopo aver creato il Widget Qt per visualizzare immagini OpenCV utilizzando OpenGL nella prima parte del tutorial, non resta che vedere come utilizzarlo.

La semplice applicazione che realizzeremo permette di visualizzare il flusso video proveniente da una webcam, è la base di partenza per ogni applicazione che utilizza OpenCV.

Questo tutorial prevede la conoscenza di base di Qt Creator e di Qt. Se qualche passaggio non vi risulta chiaro o sufficientemente spiegato non esitate a contattarmi via email.

Iniziamo aprendo l’applicazione QtCreator, Qt può essere utilizzato anche in altri ambienti di lavoro (Eclipse, Visual Studio, …), ma sinceramente preferisco utilizzare il suo ambiente originale in quanto è stato appositamente realizzato per sfruttare tutte le caratteristiche di Qt.

Creiamo un nuovo progetto “Qt Widget Project” -> “Qt GUI Application”.

Copiamo nella cartella del progetto i file creati nella prima parte del tutorial.

Aggiungiamo al progetto il file “cqtopencvviewergl.h” e “cqtopencvviewergl.cpp”.

Aggiungiamo alla GUI il Widget OpenCV-OpenGL:

  • apriamo il form
  • inseriamo un widget standard prendendolo dal menu “Containers”
  • chiamiamo il widget “openCVviewer”
  • clicchiamo con il tasto destro sul widget e selezioniamo “Promote to”
  • nella finestra che si apre selezioniamo “Add” e nella casella “Promoted Class Name” inseriamo “CQtOpenCVViewerGl”
  • Clicchiamo con il destro sulla GUI, selezioniamo Layout e quindi “Layout in a Grid” per espandere il widget su tutta l’area disponibile

La base dell’interfaccia è pronta. Ora dobbiamo configurare l’applicazione in modo che possa utilizzare OpenCV:

  • Apriamo il file “pro” e aggiungiamoINCLUDEPATH += your openCV path(for Linux: INCLUDEPATH += /usr/local/opencv2/)
  • aggiungiamo ancheLIBS     += -lopencv_core -lopencv_highgui

Ora che l’applicazione è predisposta all’utilizzo di OpenCV possiamo inserire il codice per la visualizzazione delle immagini dalla Webcam.

Apriamo ancora il form e inseriamo una voce “Start” al menu:

  • selezioniamo la barra di menu dove la label “Type here” e inseriamo la voce “Camera”
  • Selezioniamo la voce camera e nel sottomenu in “Type here” digitiamo “Start

Nel menu “Action Editor” clicchiamo con il tasto destro su “actionStart” e selezioniamo “Go to slot…”->”triggered()”.

QtCreator in questo modo crea automaticamente la funzione che verrà chiamata quando l’utente selezionerà “Camera”->”Start”.

La nostra funzione sarà molto semplice:

mCapture è una variabile privata della nostra GUI:

Ricordiamoci inoltre che per utilizzare VideoCapture è necessario includere il modulo “HighGUI” di OpenCV nella nostra applicazione:

L’applicazione deve gestire il timer che abbiamo appena creato in modo che ogni 50 msec chieda alla webcam una nuova immagine e la invii al nostro widget opengl.

Aggiungiamo alla nostra classe principale la gestione dell’evento Timer:

Che conterrà il seguente semplicissimo codice:

Siamo arrivati alla fine. La semplice applicazione per visualizzare il flusso video da una webcam utilizzando Qt, OpenCV e OpenGL è pronta, non resta che compilare e provare.

Tutto il codice aggiornato è disponibile su Github:

Buon divertimento 🙂

12 Responses

  1. giancalba says:

    C’è un piccolo errore di battitura nel codice. Compaiono degli strani caratteri tipo & g t ;

    • Myzhar says:

      L’avevo già notato… purtroppo è un errore del plugin di visualizzazione del codice che a volte “traduce” l’html. Puoi scaricare il codice corretto nel “rar” allegato alla pagina.
      Ti ringrazio comunque della segnalazione, provo a correggere sperando che l’ultimo aggiornamento del plugin risolva il problema.

    • Walter Alex Lucetti says:

      Ho corretto… è un problema del plugin per la visualizzazione del codice, a volte modifica i caratteri in “html”.
      Grazie mille per la segnalazione

  2. Hi! how can I migrate this code to use the new QOpenGLWidget class? as the QGLWidget is no longer supported.

  3. myzhar says:

    You can find the working code here:
    https://github.com/Myzhar/QtOpenCVViewerGl

    I tested it under Ubuntu using Qt 5.4.1

  4. giuseppedes says:

    How to stop the timer?! (or how to stop the video?)

  5. assuming I want to migrate your code to QtQuick (for use w/ QML), what base class would you recommend for use?

    p.s.
    I am already using QtMultimedia’s Camera, but it is so incredibly slow that I want to abandon it in favor of OpenCV Camera API.

Lascia un Commento

This site uses cookies. Find out more about this site’s cookies.
%d bloggers like this: