...
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 | ||
---|---|---|
|
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.
...
Sivustolla oleva ohjelma käy muutamia näistä läpi ja muuttaa niiden parametreja, joilla se esittelee näiden käyttöätoimintaa. Yksinkertaistettuna näiden funktioiden käyttö kuitenkin tapahtuu seuraavien funktioiden avulla.
...
Mat image = imread("kuva.jpg",0); //Ladataan kuva.jpg harmaasävykuvana
blur(image,image,Size(3,3)); //Suodatetaan blur funktiolla 3x3 kokoisella kernelillä
Threshold
Threshold funktiota voidaan käyttää binäärikuvien luomiseen. Yksinkertaisimmillaan siinä voidaan asettaa arvo, jonka ylittävät kuvapisteen arvot asetetaan ykkösiksi ja alittavat asetetaan nollaksi.
...
Dilate, Erode, Open, Close
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 QGraphicsSceneui->graphicsView->setScene(scene); //Asetetaan scene graphicsView widgettiinscene->addPixmap(QPixmap::fromImage(qimg)); //Piirretään Lisätään kuva sceneen, tätä käytetään myös kuvan päivittämiseen.