Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

OpenCV kirjaston käyttö kannattaa yleensä aloittaa käymällä läpi OpenCV sivuston opetuskurssit. Nämä ovat yleensä erittäin hyvin ajantasalla ja niiden käyttö on pyritty tekemään helpoksi ja ne on selostettu erittäin hyvin.

Table of Contents
outlinetrue

Qt-käyttöliittymä

OpenCV käyttö on myös mahdollista Qt:lla tehdyissä käyttöliittymissä, tämä helpoittaa laadukkaan käyttöliittymän luomisessa. Joitakin asioita on kuitenkin otettava huomioon, kuten reaaliaikasen kuvan käsittely ja kuvan näyttäminen. OpenCV esimerkeissä reaaliaikaista kuvaa tai videota käsitellessä ohjelma jätetään pyörimään While looppiin, joka ei ole mahdollista Qt:n kanssa ja ohjelma kaatuu. Qt:n kanssa reaaliaikaista voidaan kuitenkin käyttää QTimer ajastimella tai vaihtoehtoisesti aina kun kuva on käsitelty lähetetään signaali että ladataan uusi kuva.

Reaaliaikainen kuva

Kuvan näyttäminen

Kuvan voidaan näyttää Qt käyttöliittymässä lukemalla kuva OpenCV:n Mat datasta kuva QImage muotoon, jolloin kuva voidaan piirtää Qt-käyttöliittymään. OpenCV lataa kuvat oletuksena BGR väriformaatilla, kun Qt taas käyttää oletuksena RGB väriformaattia. Kuva tulee muuttaa RGB muotoon, jotta se näkyy oikein. Seuraavassa esimerkkikoodissa on esitettynä kuvan lukeminen Mat datasta QImage dataan.

 cv::Mat _image=imread("esimerkki.jpg");
 QImage qimg;
 if(_image.channels()==1) //Katsotaan kuvakanavien määrä, harmaasävy kuvassa 1 ja RGB 3.
 {
 qimg = QImage((uchar*)_image.data,_image.cols,_image.rows,_image.step,QImage::Format_Indexed8); 
 //Kuvan luetaan QImage muotoon, formaatti (*data,width,height,bytesperline,format)
 }
 else if(_image.channels()==3)
 {
 cv::cvtColor(_image,_image,CV_BGR2RGB);
 //Muunnetaan kuva Qt:n käyttämään RGB väriformaattiin.
 qimg = QImage((uchar*)_image.data,_image.cols,_image.rows,_image.step,QImage::Format_RGB888);
 }

Reaaliaikainen kuva

Kuvan

...

Kuvan näyttämiseen voi käyttöliittymässä voidaan käyttää esimerkiksi QGraphicsView tai label widgettiä. Seuraavissa esimerkkikoodeissa on esitettynä nämä vaihtoehdot.

 ui->imgLabel->setPixmap(QPixmap::fromImage(img));
 //Kuvan piirto label widgetiin.

GraphicsView taas on vähän monipuolisempi widget jossa pystytään esittämään 2D kuvaa, siitä pystyy valitsemaan kuva-alueita ja vierittämään suurempiakin kuvia joten sen käyttö on usein suositeltavaa. Sille täytyy ohjelmassa esittää QGraphicsScene, johon kuva päivitetään. GraphicsView seuraa kokoajan scenen muutoksia, joten riittää kuin sceneen päivittää tämän jälkeen uuden kuvan nii se näkyy ruudulla.

 scene=new QGraphicsScene(); //Luodaan QGraphicsScene
 ui->graphicsView->setScene(scene); //Asetetaan scene graphicsView widgettiin
 scene->addPixmap(QPixmap::fromImage(qimg)); //Piirretään kuva sceneen, tätä käytetään myös kuvan päivittämiseen.