[C++] Guida OpenCV, versione 2.4.2

« Older   Newer »
  Share  
Robby18
CAT_IMG Posted on 12/9/2012, 18:37     +2   +1   -1




CITAZIONE
Attenzione!!!

EDIT: 26/10/14
Poichè il forum è ormai in disuso, e non mi collego spesso.
La guida resterà aggiornata su questo sito
Nei prossimi giorni inizio a lavorarci.

Oggi, voglio illustrarvi questa (fantastica) libreria, orientata alla computer vision.

Da Wikipedia:

CITAZIONE
Utilizzi:

2D and 3D feature toolkits
Egomotion estimation
Facial recognition system
Gesture recognition
Human–computer interaction (HCI)
Mobile robotics
Motion understanding
Object identification
Segmentation and Recognition
Stereopsis Stereo vision: depth perception from 2 cameras
Structure from motion (SFM)
Motion tracking

CITAZIONE
Linguaggi di programmazione:

The library was originally written in C[2] and this C interface makes OpenCV portable to some specific platforms such as digital signal processors. Wrappers for languages such as C#, Ch [3], Python,[4] Ruby and Java (using JavaCV[5]) have been developed to encourage adoption by a wider audience.

(Il linguaggio che utilizzerò in questa guida è (come da titolo) il C++, Mentre come IDE Code::Blocks (e naturalmente come compilatore MinGW))


Installazione:

Allora per prima cosa, andate su OpenCV.org e scaricate l'ultima versione (2.4.2).
Una volta avviato il file, vi chiederà dove estrarre la libreria
(Consiglio di creare una cartella, apposita in C:\)
A fine decompressione, aprite la cartella appena creata e spostatevi nella cartella "build"
E, a seconda del vostro processore, spostatevi nella cartella "x86" o "x64"
poi in "mingw" e successivamente in "bin", copiate il percorso della cartella
e aggiungetelo alle varibili d'ambiente.
Per utenti XP (come me):
(per vista(spero per voi di no xD) o 7, il procedimento è analogo)
Risorse del computer->tasto destro->proprità->avanzate->varibili d'ambiente->varibili dell'utente
poi cliccate su "nuovo" (oppure su "modifica" per aggiungere ad una già esistente)
e come "nome varibile" inseriamo "path" mentre come "valore variabile" il percorso della cartella bin che abbiamo copiato prima,
nel mio caso
CODICE
"C:\devel\OpenCV-2.4.2\opencv\build\x86\mingw\bin;"


(probabilmente, servirà un riavvio del PC)

Perchè abbiamo fatto tutto ciò?!?
Per linkare le dll necessarie durante l'esecuzione del programma....

Primo programma:

Oooook, allora, una volta completata la configurazione non ci resta che iniziare a
programmare, quindi adesso vedremo come fare il nostro primo programma:

Caricare e Visualizzare un immagine...

Quindi apriamo codeblocks e creiamo un nuovo progetto:

File->New->Project->Console Application->nome del progetto->ecc...

Ora dobbiamo linkare le librerie necessarie...

Nel "workspace" (a sinistra) clicchiamo con il tasto destro sul nostro progetto:

Build options->Search directories->compiler->add

e inseriamo i percorsi per includere i file header dei moduli "core" e "highgui" (quelli necessari alla realizzazione di questo programma)

(nel mio caso):
CODICE
"C:\devel\OpenCV-2.4.2\opencv\modules\core\include"
"C:\devel\OpenCV-2.4.2\opencv\modules\highgui\include"


Poi spostiamoci nella voce "linker"->add e così indicheremo in quale cartella, devono essere cercate le librerie da linkare

CODICE
"C:\devel\OpenCV-2.4.2\opencv\build\x86\mingw\lib"


Quindi per specificare, quali librerie sono da linkare, spostiamoci in "linker settings"->add

le librerie da linkare sono: "libopencv_core242.dll.a" e "libopencv_highgui242.dll.a"
CODICE
"C:\devel\OpenCV-2.4.2\opencv\build\x86\mingw\lib\libopencv_core242.dll.a"
"C:\devel\OpenCV-2.4.2\opencv\build\x86\mingw\lib\libopencv_highgui242.dll.a"


Ok adesso siamo pronti per programmare:

apriamo il file "main.cpp" e cancelliamo tutto xD....copiate questo codice:
CODICE
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
//#include <iostream>

using namespace cv;
//using namespace std;

int main()
{
   
   Mat img; //Creo un oggetto di tipo Mat (Matrice)
   
       img = imread("C:/devel/OpenCV-2.4.2/opencv/samples/cpp/board.jpg");   // Carica l'immagine
   
       imshow("Prova",img); // La visualizza

   waitKey(0);   // Attende finchè non viene premuto un tasto
   return 0;
}


Ok analizziamo:

per le prime 5/6 righe spero che non ci sia nulla da spiegare xD

CODICE
Mat img;


Abbiamo dichiarato un oggetto di tipo Mat (che sta per matrice) dal nome img, cioè conterrà l'immagine che sarà caricata

CODICE
img = imread("C:/devel/OpenCV-2.4.2/opencv/samples/cpp/board.jpg");

Assegno ad img l'immagine caricata attraverso la funzione imread (questa funzione, ha anche altri paramentri, che in questo momento, non vedremo come utilizzare)

CODICE
imshow("Prova",img);

Visualizziamo, l'immagine con la funzione imshow, questa funzione ritorna void ed ha come parametri, una stringa, che sarà il nome della finestra nella quale verrà visualizza l'immagine e un oggetto di tipo Mat (cioè l'immagine)

CODICE
waitKey(0);


La funzione waitKey() ha come paramentro la durata in millisecondi che deve attendere finchè non viene premuto un tasto...

waitKey(0) aspetta finchè non viene premuto un tasto
waitKey(1000) aspetta per un secondo la pressione di un tasto

ritorna un int...

Va buò, per oggi è tutto...

To be continued... (speriamo xD)

EDIT: 22/09/12

Inserito l'eseguibile del primo programma. A breve continuerò la guida...

EDIT: 23/09/12

Allora, abbiamo visto come caricare e visualizzare un'immagine, ora vedremo come:

Modificare e Salvare l'immagine...

Quindi riapriamo il nostro progetto (oppure ne creiamo uno nuovo)

E scriviamo questo codice:

CODICE
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cv.h>

int main()
{
       cv::Mat img,grayimg;

       img = cv::imread( "board.jpg");

       if( img.empty() )
               return -1;


   cvtColor(img,grayimg,CV_RGB2GRAY);

   cv::imwrite("gray_board.jpg",grayimg);

       cv::imshow( "Immagine caricata",img);

   cv::imshow("Seconda immagine",grayimg);

       cv::waitKey(0);

       return 1;
}


(Analizziamo le parti di codice, che abbiamo aggiunto)

CODICE
grayimg;


Prima di tutto ho dichiarato un altro oggetto di tipo Mat che conterrà la nuova immagine modificata...

CODICE
cvtColor(img,grayimg,CV_RGB2GRAY);


La funzione cvtColor invece, permette di convertire un'immagine da un colore ad un altro....
Ritorna Void ed ha come primo parametro, l'immagine di origine(quindi quella RGB). Come secondo parametro un'immagine di destinazione, dove verrà salvata l'immagine convertita e come terzo parametro il tipo di conversione che intandiamo utilizzare (in questo caso CV_RGB2GRAY, quindi da una a colori a grigio)...

CODICE
cv::imwrite("gray_board.jpg",grayimg);


imwrite è la funzione che permette di "scrivere" un'immagine su disco...
Ha come primo parametro una stringa, cioè il nome del file. Come secondo un oggetto di tipo Mat, cioè l'immagine che abbiamo convertito prima e che dobbiamo salvare...

Vi lascio il link dove poter scaricare l'eseguibile di questo programma

Questo è tutto, per ulteriori informazioni andate su http://docs.opencv.org/ e divertitevi...
Per qualsiasi problema o dubbio, commentate pure o mandatemi un messaggio....

P.s: La prossima volta spiegherò come acquisire video dalla webcam...

Edited by Robby18 - 29/10/2014, 17:31
 
Top
»Master
CAT_IMG Posted on 12/9/2012, 22:40     +1   -1




Interessante, hai qualche esempio compilato per me che non me ne intendo di C++?
 
Top
CAT_IMG Posted on 12/9/2012, 22:52     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Interessante questa libreria...
 
Top
Robby18
CAT_IMG Posted on 13/9/2012, 00:02     +1   +1   -1




CITAZIONE (»Master @ 12/9/2012, 23:40) 
Interessante, hai qualche esempio compilato per me che non me ne intendo di C++?

Sto provando a fare un programma per il riconoscimento facciale, appena verrà fuori qualche cosa di decente lo pubblicherò....comunque se vuoi compilerò i vari esempi che farò nella guida e li pubblico...
 
Top
»Master
CAT_IMG Posted on 13/9/2012, 01:30     +1   -1




CITAZIONE (Robby18 @ 13/9/2012, 01:02) 
CITAZIONE (»Master @ 12/9/2012, 23:40) 
Interessante, hai qualche esempio compilato per me che non me ne intendo di C++?

Sto provando a fare un programma per il riconoscimento facciale, appena verrà fuori qualche cosa di decente lo pubblicherò....comunque se vuoi compilerò i vari esempi che farò nella guida e li pubblico...

Riconoscimento facciale? Grande :D
Si, se lo fai ti ringrazio :yum:
 
Top
Robby18
CAT_IMG Posted on 23/9/2012, 12:21     +1   -1




Breve Aggiornamento della guida...
 
Top
th1sk
CAT_IMG Posted on 3/1/2013, 19:04     +1   -1




Grande :asd:
 
Top
6 replies since 12/9/2012, 18:37   3035 views
  Share