Versions Compared

Key

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

...

Tällä sivustolla käsitellään kaikkein yksinkertaisimmat esimerkit kuten kuvan lataaminen ja muutamia suodattimia. Lisäksi käydään läpi asioita, joille sivustolta ei löydy esimerkkejä kuten Qt käyttöliittymän hyödyntäminen ja erilaisten kameroiden käyttö OpenCV kanssa.

Table of Contents
outlinetrue

Console sovellus QT:lla

console-sovellus Qt:lla

Kuvan lataaminen

Kuvan lataamiseen löytyy useita eri funktioista jotka löytyvät OpenCV dokumentaatiosta, nämä tehdään yleensä highgui luokalla. OpenCV käyttää Mat datatyyppiä kuville, se on matriisityyppinen datarakenne, jonne kuvat tallennetaan yleensä BGR väriformaatissa.

...

Mat image = imread("kuva.jpg",0); //Ladataan kuva.jpg harmaasävykuvana

blur(image,image,Size(3,3)); //Suodatetaan sitä blur funktiolla 3x3 kokoisella kernelillä

...

Dilate, Erode, Open, Close

Erosion & Dilation esimerkki

 

 

Kuvista tunnistaminen

HoughCircles, matchTemplate, findContours käydään läpi ja linkitetään machine learning, findobjects ja features2d luokkien esimerkit. Ehkä liikkuva kuva.

...

 cv::Mat _image=imread("esimerkki.jpg");
 QImage qimg;
 if(_image.channels()==1) //Katsotaan kuvakanavienvärikanavien 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);
 }

Kuvan näyttämiseen käyttöliittymässä voidaan käyttää esimerkiksi QGraphicsView tai label widgettiäwidgetteja. Seuraavassa esimerkkikoodissa on yksinkertaisemman label widgetin käyttö.

...

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 esittelyn jälkeen riittää, että 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 Lisätään kuva sceneen, tätä käytetään myös kuvan päivittämiseen.