Sunteți pe pagina 1din 30

Computer

Vision
Catalin Stoean
catalin.stoean@inf.ucv.ro
http://inf.ucv.ro/~cstoean
Obiective
Procesarea de imagini cu clase

Realizarea unei interfete in QT cu:


o Butoane pentru incarcare, salvare si procesare imagine

o Posibilitatea alegerii de catre utilizator a unei culori

o Slider
Gasim toti pixelii cu o
anumita culoare
Realizam un algoritm de identificare a pixelilor dintr-
o imagine care au o culoare data sau una
apropiata ei
INPUT: o imagine, o culoare si un prag de toleranta
OUTPUT: imaginea in care pixelii asemanatori culorii
date sub toleranta stabilita sunt albi
Restul sunt de culoare neagra.
Identificarea pixelilor
Imaginea de
intrare: image
Imaginea
rezultata: rez
Tipul imaginii
de iesire:
CV_8U
Distanta intre doua culori

Argumentul primit consta intr-un vector de 3 valori


trimis de la pixelul curent din metoda process.
target contine valorile culorii tinta.
Distanta utilizata este cea cu numele de
Manhattan.
Se poate utiliza cea Euclidiana.
Clasa ColorDetector
Elementele
private din
cadrul clasei.
Metoda
getDistance
este apelata
numai in cadrul
acestei clase,
prin urmare se
poate considera
private.
Constructorul clasei

In constructor punem niste valori standard pentru


distanta minima si culoare.

Acestia pot fi modificati sau intorsi prin metodele de


tip set si get pe care le vom defini in continuare.
set & get
Toate acestea sunt de tip
public.
Stabilim valoarea prag a
distantei si intoarcem
valoarea sa.
2 metode de a stabili
culoarea tinta
o se alege cea convenabila

Metoda pentru a
intoarce culoarea tinta
Clasa ColorDetector
Clasa se poate
defini in acelasi
fisier cu metoda
main sau in fisier
separat header
(*.h)

Incheiem fisierul
header cu
#endif.
main.cpp
Includem clasa
ColorDetector
Cream o instanta a
clasei
Citim o poza
Stabilim culoarea
cautata
Procesam imaginea
Afisam imaginile
o Initiala
o Procesata
Rezultatul
A se revedea prezentarea de la cursul 2

Acelasi lucru cu GUI


O interfata care sa ii permita utilizatorului sa dea
valori parametrilor de intrare.
Pastram clasa definita anterior la fel.
Cream in QT un proiect de tip Widgets Application.
Vom avea o structura a proiectului precum cea de
mai jos
o Am adaugat si colorDetector.h
Stabilirea interfetei grafice
Adaugam in mainwindow.ui componentele
urmatoare:
Stabilirea interfetei grafice
Primul buton urmeaza sa fie folosit pentru a incarca
o imagine de pe calculator
Al doilea buton va deschide o fereastra care sa ii
permita utilizatorului sa aleaga o culoare
Slider-ul ofera posibilitatea stabilrii pragului distantei
Label-ul va contine informatia cu privire la valoarea
preluata din slider
Stabilirea interfetei grafice
Label-ul mare din partea dreapta va contine
imaginea
Butonul Proceseaza modifica imaginea
o Devine valid dupa ce se incarca o imagine

Ultimul buton deschide dialogul pentru salvarea


imaginii rezultate
o Acesta va deveni valid doar dupa apasarea butonului Proceseaza
Stabilirea interfetei grafice
Pentru toate componentele din GUI cu exceptia
etichetelor generam functii de tratare a
evenimentelor

Captura este din fisierul mainwindow.h si contine


sloturile care sunt adaugate automat cand se
selecteaza actiunile corespunzatoare in
mainwindow.ui.
Pachete necesare
In mainwindow.h importam pachetele care ne sunt
necesare in cadrul proiectului.
Nu uitam sa facem conexiunile in cadrul fisierului
.pro.
Variabilele din
mainwindow.h
Variabilele de care avem nevoie in interfata sunt
incluse in mainwindow.h in zona private.
Cu ui controlam obiectele din interfata.
poza si rez reprezinta imaginile de intrare si iesire din
algoritm
o De cea de a doua avem nevoie pentru a salva imaginea rezultata pe
calculator

cDetect se ocupa de procesarea imaginii


pozaFormatQT este folosita pentru a vedea daca
trebuie sa facem transformare din Mat in QT.
mainwindow.cpp
In constructor dezactivam ultimele doua butoane si
initializam variabila pozaFormatQT cu false.
Functia pentru slider
Functia de mai jos intoarce valoarea curenta din
slider.
Construim un string la care adaugam valoarea
pentru ca utilizatorul sa poata observa ce valoare
selecteaza.
o Stringul este trimis catre primul label

Valoarea este trimisa catre pragul din cDetect


Slider
Implicit, slider-ul ia
valori intre 0 si 100
Daca vrem sa
stabilim alte limite,
schimbam valorile
la sectiunea din
dreapta
Se pot schimba si
alte detalii legate
de interfata
Incarcarea pozei
Se citeste poza
Se activeaza
butonul de
procesare
Schimbam
canalele din BGR
in RGB pt QT
Punem poza in
partea dreapta a
ferestrei
Incarcarea pozei
Alegerea culorii tinta
Alegerea culorii se face prin dialogul oferit de QT
Culoarea este apoi trimisa catre metoda specifica
lui cDetect.
Alegerea culorii tinta
Butonul de procesare
Verificam daca poza este in format QT si in caz
afirmativ o trecem inapoi in BGR
o Verificarea este necesara pentru cazul in care utilizatorul apasa de mai
multe ori butonul de procesare
Butonul de procesare
Butonul de salvare
Prin dialogul de salvare a pozei se stabileste calea
catre fisier si numele fisierului.

Stabilim acel Qfile cu imaginea care urmeaza sa fie


salvata.
Butonul de salvare
Exercitii
(1p) La proiectul anterior adaugati butoane radio
pentru a permite utilizatorului sa aleaga din mai
multe distante posibile:
o Manhattan
o Euclidiana
o Chebyshev
o Minkowski
Termen: 5 nov

(0.5p) Scoateti butonul de procesare si realizati


procesarea imaginii imediat ce se elibereaza clicul
de la mouse de pe slider. Modificarea se face doar
daca valoarea de la slider este diferita de 0.
o Termen: 5 nov

S-ar putea să vă placă și