Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Librerie OpenCV Corso di Calcolatori Elettronici.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 Tutto su liceoclassicojesi.it 1° Incontro sulla gestione di liceoclassicojesi.it.
“Intervista sul mondo del lavoro”
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Introduzione ai calcolatori Parte II Software di base.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
I linguaggi di programmazione
Installazione di Apache 2, PHP5, MySQL 5
CONOSCIAMO IL WINDOWS '95.
Frontespizio Economia Monetaria Anno Accademico
I sistemi di riferimento
Training On Line – CONA. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Annuali > Nuova Richiesta Si accede alla pagina di Richiesta.
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Caratteri e stringhe di caratteri
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
Algoritmo di Ford-Fulkerson
Programmazione 1 9CFU – TANTE ore
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
1 Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dellambiente di sviluppo, compilazione.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Laboratorio di Informatica
JavaScript: Array JavaScript: Array.
Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.
Windows Sistema operativo con interfaccia grafica per PC IBM compatibili (varie versioni dal 95) La gestione dei file viene fatta secondo le modalità.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
Espressioni condizionali
Introduzione alle basi di dati
Corso di PHP.
Portale Capacità STOGIT
Trattamento di Foto e Immagini Digitali
Il nostro computer navigando su Internet è molto esposto a rischio di virus, spyware o hacker che minacciano lintegrità dei nostri dati. Proteggere il.
Il compilatore Dev-C++
1° passo Aprire Internet Explorer Andare alla homepage di Ateneo Aprire il menu Ateneo Scorrere fino Servizi di Ateneo Cliccare su Servizi Informatici.
GIMP!: COME RENDERE TRASPARENTE LO SFONDO DI UN’IMMAGINE
WINDOWS XP PRIMI PASSI. Caratteristiche del sistema Le caratteristiche di base del PC (tipo e versione del sistema operativo installato, tipo e velocità
Educare al multimediale 1 – Verso il digitale 2 Presentazione a cura di Gino Roncaglia Prima parte: Informazione in formato digitale.
Esercitazione 1: Rispetto al test di ansia (Media=25; σ=5), calcolare:
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
PROGRAMMARE IN C Un ambiente di sviluppo `e un software che serve per scrivere ed eseguire programmi. Generalmente integra almeno 3 funzionalita’: Editor:
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Esercitazioni di Meteorologia da satellite
LE SAI LE TABELLINE? Mettiti alla prova!.
QUIZ – PATENTE EUROPEA – ESAME WORD
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
Unità Didattica 3 Linguaggio C
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Librerie OpenCV Corso di Calcolatori Elettronici.
Documentazione Tecnica
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
USO DEL COMPUTER E GESTIONE DEI FILE
Modulo 6 Test di verifica
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
1. PRESENTAZIONE DEI PROGRAMMI UTILIZZATI Per registrare un video, editarlo o montare più video insieme si utilizza il programma AVS Video Editor. Il.
METODI DI RAPPRESENTAZIONE TECNICA
TRASFORMATA DI FOURIER
Programmazione in linguaggio C
A.P. cat. B - 1 Per chi vuole: Libro di testo D.P. Curtis, K. Foley, K. Sen, C. Morin Informatica di base 2° edizione Mc Graw-Hill Companies.
1 Microsoft Access Gruppo di lavoro Alberti, Boldi, Gaito, Grossi, Malchiodi, Mereghetti, Morpurgo, Rosti, Palano, Zanaboni Informatica per laurea triennale.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Sss Tutorial Reader 2D Tutorial. sss Tutorial Con Reader 2D è possibile creare un percorso di lettura di un’immagine personalizzato. Vediamo come….
Programmazione orientata agli Oggetti Introduzione a Java.
Transcript della presentazione:

Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Librerie OpenCV Corso di Calcolatori Elettronici II (Visione artificiale) Messina, 11/12/2009 Seminario tenuto dall’ing. Filippo Battaglia

Visilab – Computer Vision and Image Processing Lab Nanodesktop tecnology Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Esecuzione di algoritmi di visione artificiale Nanodesktop tecnology Problema iniziale: Esecuzione di algoritmi di visione artificiale su una piattaforma standardizzata Librerie Intel OpenCV disponibili solo per sistemi operativi per piattaforma x86 (Windows, Linux, FreeBSD) Necessità di elevate prestazioni del processore nei calcoli in virgola mobile Necessità di elevate prestazioni dell’hardware (memory bandwidth, video acceleration) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

OpenCV Sono le librerie open source più comuni per l’esecuzione di Nanodesktop tecnology OpenCV Sono le librerie open source più comuni per l’esecuzione di algoritmi di visione artificiale. Rilasciate da Intel come OSS sotto licenza BSD (Berkeley Software License) http://sourceforge.net/projects/opencvlibrary/ Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le librerie OpenCV possono gestire svariati Nanodesktop tecnology Le librerie OpenCV possono gestire svariati algoritmi di visione artificiale per mezzo di routine totalmente standardizzate Conversione RGB/YUV Rotazioni, scaling, translazioni Applicazione di filtri immagine Calcolo di istogrammi ed applicazione di soglie Applicazione di operatori (gradiente, laplaciano) Riconoscimento facciale Ricerca di connected component Algoritmi di segmentazione Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Per programmare con le librerie OpenCV è Nanodesktop tecnology Per programmare con le librerie OpenCV è necessario procurarsi uno dei manuali applicativi presenti in rete OpenCVReferenceManual.pdf Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

oppure alcuni libri Gary Bradsky, Kaehler Adrian Nanodesktop tecnology oppure alcuni libri Gary Bradsky, Kaehler Adrian Learning OpenCV: Computer Vision with the OpenCV Library Editrice O’Reilly Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le librerie OpenCV supportano i linguaggi C, C++ e Python Nanodesktop tecnology Le librerie OpenCV supportano i linguaggi C, C++ e Python Sotto x86 possono essere usate sotto i 3 linguaggi, sotto Nanodesktop (PSP) possono essere usate solo sotto C e C++ (linking solo statico) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Dal punto di vista del programmatore C, Nanodesktop tecnology Dal punto di vista del programmatore C, il sistema OpenCV è composto da quattro librerie cxcore Contiene le routine di manipolazione immagine a basso livello, funzioni di gestione della memoria, manipolazione degli array e dei vettori Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le routine di calcolo istogrammi, trasformazioni geometriche, Nanodesktop tecnology cv Le routine di calcolo istogrammi, trasformazioni geometriche, determinazione di feature sono contenute qui cvaux Contiene routine ausiliarie fondamentali per i sistemi di face detection Viola-Jones, e per la face recognition via HMM e PCA Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Qui troverete le routine per Nanodesktop tecnology highgui Qui troverete le routine per caricamento e salvataggio dei formati immagine supportati (BMP, JPG, PNG, and TIFF) acquisizione da video camera acquisizione da video AVI e MPG gestione delle finestre del window manager HighGUI ha diverse dipendenze: Usa Video4Linux sotto Linux e Video For Windows sotto Win32; Richiede le librerie di gestione dei formati immagine (incluse sotto Win32) Sotto Linux usa GTK+ e sotto Win32 usa Windows GDI Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

La versione attuale delle librerie OpenCV Nanodesktop tecnology La versione attuale delle librerie OpenCV per x86 è la 2.0.0a (rilasciata all’ottobre 2009) http://sourceforge.net/projects/opencvlibrary/ Per Nanodesktop PSPE/PSP è disponibile la versione 1.0 delle OpenCV http://visilab.unime.it/~filippo/Nanodesktop/nanodesktop.htm Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Vediamo ora come è possibile installare le librerie OpenCV su PC Nanodesktop tecnology Vediamo ora come è possibile installare le librerie OpenCV su PC (Per l’uso sotto Nanodesktop PSP, vi rimando alla Nanodesktop User Guide, capitolo 29) Qui mi occuperò esclusivamente dell’ installazione sotto Win32. Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Per prima cosa, è necessario scaricare dalla Nanodesktop tecnology Per prima cosa, è necessario scaricare dalla rete il pacchetto OpenCV 2.0. Il file OpenCV-2.0.0a-win32.exe è un installer per Win32 che permette di installare le librerie e di settare correttamente la variabile PATH del sistema Win32. Questo è importante, perchè sotto Win32 OpenCV lavora per mezzo di 4 librerie dinamiche (cxcore099.dll, cv099.dll, cvcam099.dll, highgui099.dll) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Adesso ci serve un IDE (Integrated Development Environment). Nanodesktop tecnology Adesso ci serve un IDE (Integrated Development Environment). In commercio ce ne sono diversi: io vi consiglio il buon, vecchio Dev-C++ (www.bloodshed.com) che ha il vantaggio di essere utilizzabile anche per Nanodesktop. (Chi si diletta di programmazione Java può usare NetBeans + pacchetto supporto C++) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Scarichiamo dunque l’installer di Dev-C++ Nanodesktop tecnology Scarichiamo dunque l’installer di Dev-C++ 5.0 beta1 dal sito di Bloodshed devcpp-4.9.9.2_setup.exe e provvediamo ad installarlo Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

L’IDE al primo avvio si presenta in questo modo Nanodesktop tecnology L’IDE al primo avvio si presenta in questo modo Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Creiamo un nuovo progetto Dev-C++ scegliendo Empty project Nanodesktop tecnology Creiamo un nuovo progetto Dev-C++ scegliendo Empty project Dev-C++ chiederà una cartella dove salvare i file... Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Adesso aggiungiamo un nuovo file che si chiamerà main.c Nanodesktop tecnology Adesso aggiungiamo un nuovo file che si chiamerà main.c Click con il tasto destro, Nuova unità, e verrà creato un file chiamato Senza titolo. Lo salviamo come main.c Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Inseriamo il nostro primo programma OpenCV. Nanodesktop tecnology Inseriamo il nostro primo programma OpenCV. Per ora non preoccupiamoci di come funziona #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Per compilare, dobbiamo dire a Dev-C++ dove trovare i file Nanodesktop tecnology Per compilare, dobbiamo dire a Dev-C++ dove trovare i file headers che abbiamo inserito nel sorgente. Click con il tasto destro sul nome del progetto a sinistra, Opzioni progetto, ed andiamo nel tab Cartelle Include Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le cartelle Include da inserire sono le seguenti Nanodesktop tecnology Le cartelle Include da inserire sono le seguenti <opencv folder>\cxcore\include <opencv folder>\cv\include <opencv folder>\cvaux\include <opencv folder>\otherlibs\highgui Dove <opencv folder> è la cartella dove avete installato le librerie OpenCV Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Adesso diciamo al linker (ld) dove trovare le librerie OpenCV (sotto Nanodesktop tecnology Adesso diciamo al linker (ld) dove trovare le librerie OpenCV (sotto Win32 sono dinamiche) che serviranno per il nostro programma. Click con il tasto destro sul nome del progetto a sinistra, Opzioni progetto, ed andiamo nel tab Cartella Librerie Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le cartelle di ricerca per il linker da inserire sono le seguenti Nanodesktop tecnology Le cartelle di ricerca per il linker da inserire sono le seguenti <opencv folder>\bin ATTENZIONE: La sottocartella \lib contiene le librerie a collegamento dinamico per Linux (.lib) !!!! Ma noi siamo sotto Win32, quindi ci servono le librerie dll che sono in \bin. Nota: Intel non fornisce le librerie OpenCV di tipo statico (.a). Comunque possono essere scaricate da un package del sito del Visilab (BlindServer) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Infine, dobbiamo dire al linker (ld) che librerie dinamiche linkare. Nanodesktop tecnology Infine, dobbiamo dire al linker (ld) che librerie dinamiche linkare. Andiamo nel tab Parametri, textbox Linker... ed inseriamo le librerie dinamiche che sono necessarie Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Visilab – Computer Vision and Image Processing Lab Nanodesktop tecnology Sotto Win32 ci servono le dll: -lcxcore099 -lcv099 -lcvaux099 -lhighgui099 Nota: gli utenti Linux invece usano le librerie (.lib) -lcxcore -lcv -lcvaux -lhighgui Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Siamo pronti. Clicchiamo su Ok per confermare i parametri e Nanodesktop tecnology Siamo pronti. Clicchiamo su Ok per confermare i parametri e torniamo all’interfaccia principale. Adesso Menu/Compila ed esegui Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Il nostro programma visualizza il file C:\lena.png sullo Nanodesktop tecnology Il nostro programma visualizza il file C:\lena.png sullo schermo, perciò dobbiamo assicurarci che il file sia presente sull’hard disk prima di lanciare il programma #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Visilab – Computer Vision and Image Processing Lab Nanodesktop tecnology E questo è il risultato Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Ok, abbiamo visto che funziona. Adesso torniamo al nostro programma ed Nanodesktop tecnology Ok, abbiamo visto che funziona. Adesso torniamo al nostro programma ed analizziamolo nelle sue componenti Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Le direttive include permettono al compilatore di trovare Nanodesktop tecnology Le direttive include permettono al compilatore di trovare i prototipi delle funzioni delle librerie cxcore, cv e highgui. #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Ogni immagine OpenCV è contenuta in una struct di tipo IplImage, che Nanodesktop tecnology Ogni immagine OpenCV è contenuta in una struct di tipo IplImage, che ne contiene tutti i parametri ed i pixel. OpenCV, però, in genere non agisce sulle struct IplImage, ma su puntatori a tali struct #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

cvLoadImage carica l’immagine, alloca la struct IplImage necessaria Nanodesktop tecnology cvLoadImage carica l’immagine, alloca la struct IplImage necessaria a contenerne i dati, e restituisce in uscita un puntatore a tale struct. #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Se il puntatore restituito è zero (NULL), allora il processo di caricamento è fallito. Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Quando l’immagine non serve più, possiamo liberare l’area di Nanodesktop tecnology Quando l’immagine non serve più, possiamo liberare l’area di memoria ad essa associata tramite cvReleaseImage. #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Il puntatore src potrà essere riutilizzato per altre immagini Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Quando una finestra non serve più, si può usare cvDestroyWindow Nanodesktop tecnology Per creare una finestra, si usa cvNamedWindow. Ogni finestra è identificata per mezzo di una stringa (nome) #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Quando una finestra non serve più, si può usare cvDestroyWindow Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Per visualizzare una immagine caricata in una finestra si usa Nanodesktop tecnology Per visualizzare una immagine caricata in una finestra si usa cvShowImage. #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

cvWaitKey(ms) sospende l’esecuzione finchè non viene premuto Nanodesktop tecnology cvWaitKey(ms) sospende l’esecuzione finchè non viene premuto un tasto o non trascorrono ms millisec. (ms=0, attendi per sempre) #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src; char name [255]="c:\\lena.png"; cvNamedWindow("window",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 1); cvShowImage("window", src); cvWaitKey(0); cvDestroyWindow("window"); cvReleaseImage(&src); } Sotto Win32 determina anche una chiamata al driver video per il flushing delle chiamate in coda (chiamate cvWaitKey(1) ) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Bene, ora vediamo come possiamo usare le Nanodesktop tecnology Bene, ora vediamo come possiamo usare le librerie OpenCV per applicare un filtro gaussiano ad una immagine Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Dal corso di elaborazione delle immagini sappiamo Nanodesktop tecnology Dal corso di elaborazione delle immagini sappiamo che applicare un filtro gaussiano ad una immagine significa eseguire il prodotto della f-trasformata dell’immagine di lavoro per una funzione gaussiana che taglierà le frequenze spaziali di valore più elevato La f-trasformata che otteniamo viene poi antitrasformata ottenendo l’immagine finale. Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Siccome le componenti frequenziali più Nanodesktop tecnology Siccome le componenti frequenziali più elevate di una immagine sono associate ai particolari più fini (ed al rumore salt and pepper...), nel momento in cui noi le attenuiamo tramite un filtro gaussiano otterremo un’immagine con dettagli meno definiti (smoothing). Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

La funzione che ci serve si chiama void cvSmooth (const CvArr* src, Nanodesktop tecnology La funzione che ci serve si chiama void cvSmooth (const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

- src è l’immagine IPL sorgente; dst è l’immagine di destinazione Nanodesktop tecnology dove - src è l’immagine IPL sorgente; dst è l’immagine di destinazione smoothtype è una costante che indica il tipo di smoothing. Per esempio, può essere CV_BLUR, CV_GAUSSIAN o CV_MEDIAN param1 è inv. proporzionale alla sigma che verrà usata nella gaussiana. Per i filtri blur, param1*param2 indica le dimensioni della finestra gli altri parametri (param3 e param4) possono essere posti a 0 per ora. Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Ok, il programma che ci serve è il seguente Nanodesktop tecnology Ok, il programma che ci serve è il seguente #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); // Carica a toni di grigio dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow ("window src"); cvDestroyWindow (“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Notate che stavolta abbiamo creato 2 finestre: una per l’immagine Nanodesktop tecnology Notate che stavolta abbiamo creato 2 finestre: una per l’immagine sorgente ed una per l’immagine di destinazione #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow("window src"); cvDestroyWindow(“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Abbiamo il problema di creare una immagine che abbia le stesse Nanodesktop tecnology Abbiamo il problema di creare una immagine che abbia le stesse dimensioni della sorgente. Usiamo cvCreateImage per creare una immagine vuota #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow("window src"); cvDestroyWindow (“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

cvSmooth() eseguirà il filtraggio vero e proprio Nanodesktop tecnology cvSmooth() eseguirà il filtraggio vero e proprio #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow("window src"); cvDestroyWindow(“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Dopo avere creato le due immagini IPL in memoria, dobbiamo Nanodesktop tecnology Dopo avere creato le due immagini IPL in memoria, dobbiamo visualizzarle in due finestre #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow("window src"); cvDestroyWindow(“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Dopo che l’utente ha premuto un tasto, cancelliamo le due finestre Nanodesktop tecnology Dopo che l’utente ha premuto un tasto, cancelliamo le due finestre e liberiamo la memoria impegnata dalle 2 immagini #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow("window src"); cvDestroyWindow(“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

E questo è il risultato (param1=9) Nanodesktop tecnology E questo è il risultato (param1=9) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Invece questo è il risultato per param1=31 Nanodesktop tecnology Invece questo è il risultato per param1=31 Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Possiamo trovare i prototipi di tutte le funzioni Nanodesktop tecnology Possiamo trovare i prototipi di tutte le funzioni OpenCV 2.0 a questo indirizzo... http://opencv.willowgarage.com/documentation/index.html In questo modo, modificando il programma che vi ho mostrato, possiamo allenarci ad eseguire altri filtraggi (per esempio, blurring, laplaciano, o applicazione dell’operatore di Sobel) Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Il programma resta lo stesso ? Nanodesktop tecnology E sotto ndOpenCV ? Il programma resta lo stesso ? Non del tutto: sono necessarie alcune piccole modifiche Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Questo è il programma che abbiamo usato sotto OpenCV per x86 Nanodesktop tecnology Questo è il programma che abbiamo usato sotto OpenCV per x86 #include <highgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); cvNamedWindow("window dst",CV_WINDOW_AUTOSIZE); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow ("window src"); cvDestroyWindow (“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

E questa è la corrispondente versione per Nanodesktop PSP Nanodesktop tecnology E questa è la corrispondente versione per Nanodesktop PSP #include <ndhighgui.h> #include <cxcore.h> #include <cv.h> int main (void) { IplImage *src, *dst; char name [255]="c:\\lena.png"; cvInitSystem (0, 0); // Inizializza Nanodesktop (esegue ndInitSystem() ) e ndOpenCV() cvNamedWindow("window src", 0); cvNamedWindow("window dst", 0); src=cvLoadImage(name, 0); dst=cvCreateImage( cvSize(src->width, src->height), IPL_DEPTH_8U, 1); cvSmooth (src, dst, CV_GAUSSIAN, 9, 0, 0, 0); cvShowImage("window src", src); cvShowImage("window dst", dst); cvWaitKey(0); cvDestroyWindow ("window src"); cvDestroyWindow (“window dst”); cvReleaseImage(&src); cvReleaseImage(&dst); } Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Inoltre, sotto Nanodesktop cambiano le librerie che Nanodesktop tecnology Inoltre, sotto Nanodesktop cambiano le librerie che devono essere linkate dal linker. Si chiamano: libndCxCore_PSP.a libndCv_PSP.a libndCvAux_PSP.a libndHighGUI_PSP.a e sono librerie statiche Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

Per l’uso delle OpenCV sotto Nanodesktop PSP Nanodesktop tecnology Per l’uso delle OpenCV sotto Nanodesktop PSP vi rimando (per ora) al capitolo 29 della Nanodesktop User Guide. Tale guida può essere downloadata qui: http://visilab.unime.it/~filippo/Nanodesktop/PSP_PSPE/Docs/Docs.htm Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

La prossima volta vedremo qualche uso più sofisticato Nanodesktop tecnology La prossima volta vedremo qualche uso più sofisticato delle librerie OpenCV Nel frattempo, chi volesse approfondire l’argomento può visionare le ottime slide dr. Francesco La Rosa a questo indirizzo: http://visilab.unime.it/~flarosa/OpenCV/2004_05/Opencv1_1.pdf Visilab – Computer Vision and Image Processing Lab University of Messina - Italy

GRAZIE Visilab – Computer Vision and Image Processing Lab Nanodesktop tecnology GRAZIE Visilab – Computer Vision and Image Processing Lab University of Messina - Italy