CITAZIONE
Attenzione!!!EDIT: 26/10/14
Poichè il forum è ormai in disuso, e non mi collego spesso.
La guida resterà aggiornata su
questo sitoNei 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
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)
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/12Inserito l'eseguibile del
primo programma. A breve continuerò la guida...
EDIT: 23/09/12Allora, 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)
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