If you can't read please download the document
Upload
lynhi
View
222
Download
0
Embed Size (px)
Citation preview
Introduo a Processamento de Imagens e Viso Computacional
usando OpenCV
Tutorial 2
Introduo Viso Computacional usando OpenCV
Maurcio MarengoniDenise Stringhini
Universidade Presbiteriana MackenzieFaculdade de Computao e Informtica e
Ps Graduao em Engenharia Eltrica {mmarengoni, dstring}@mackenzie.br
Resumo
Este tutorial apresenta conceitos introdutrios de processamento de imagens e de viso computacional.
Estes conceitos so introduzidos utilizando a biblioteca OpenCV, que distribuda gratuitamente e possui documentao farta na internet.
1
Introduo
Processamento de imagens um processo onde a entrada do sistema uma imagem e a sada um conjunto de valores numricos, que podem ou no compor uma outra imagem.
Viso computacional procura emular a viso humana, portanto tambm possui como entrada uma imagem, porm, a sada uma interpretao da imagem como um todo, ou parcialmente.
2
Introduo
Aps uma equalizao de histograma, em nvel de cinza, onde a placa do veculo pode ser lida.
Placa:
BRK 8558
Veculo:
Pajero 1995
Veculo emimagemescura.
Informao daplaca e do veculo no retngulo.
3
SIBGRAPI 2008 Tutorial 1
Introduo
Processos de viso computacional geralmente iniciam com o processamento de imagens.
Processamento ocorre em trs nveis: baixo-nvel: operaes primitivas (reduo de
rudo ou melhoria no contraste de uma imagem) nvel-mdio: operaes do tipo segmentao ou
classificao alto-nvel: tarefas de cognio normalmente
associadas com a viso humana
4
OpenCV
OpenCV (Open Source Computer Vision) uma biblioteca, de cdigo aberto, desenvolvida inicialmente pela Intel.
Implementa ferramentas de interpretao de imagens, indo desde operaes simples como um filtro de rudo, at operaes complexas, tais como a anlise de movimentos, reconhecimento de padres e reconstruo em 3D.
5
OpenCV
Est dividida em cinco grupos de funes: Processamento de imagens; Anlise estrutural; Anlise de movimento e rastreamento de objetos; Reconhecimento de padres; Calibragem de cmera e reconstruo 3D.
As principais sero apresentadas juntamente com os conceitos de processamento de imagens e viso computacional que devem ser empregados em seu uso.
6
OpenCV - Exemplo
// conversaoCores.cpp - faz a conversao de //cores de RGB para HSV#include "cv.h"#include "highgui.h"#include int main(){
char name[] = "imagens/exemplo1.jpg";// definicao de variaveis do tipo imagemIplImage* img = NULL;IplImage* res = NULL;// definicao de variavel que armazena uma// estrutura com o tamanho de uma imagemCvSize imgSize;// carrega a imagem exemplo1 na variavel imgimg = cvLoadImage( name, -1 );// extrai o tamanho da variavel carregadaimgSize.width = img->width;imgSize.height = img->height;// cria uma nova imagem com o mesmo tamanho// da imagem carregada e do mesmo tipores = cvCreateImage(imgSize, img->depth,img->nChannels );
// faz a conversao do sistema de cor RGB para HSVcvCvtColor( img, res, CV_RGB2HSV );// cria uma janela de visualizacao com o nome "imagem
original"cvNamedWindow( "imagem original", 1 );// carrega a imagem original na janela criadacvShowImage( "imagem original", img );//repete o processo para a outra imagemcvNamedWindow( "imagem em HSV", 1 );cvShowImage( "imagem em HSV", res );// aguarda alguem pressionar uma tecla do tecladocvWaitKey(0);//fecha as janelas criadascvDestroyWindow( "imagem original" ); cvDestroyWindow( "imagem em HSV" ); // libera memoria usada pelas imagenscvReleaseImage( &img );cvReleaseImage( &res );return(0);
}
7
SIBGRAPI 2008 Tutorial 2
OpenCV - Exemplo8
Processamento de Imagens
Muitas vezes as imagens de onde queremos extrair alguma informao precisam ser convertidas para um determinado formato ou tamanho.
Precisam ainda ser filtradas para remover rudos provenientes do processo de aquisio da imagem.
9
Rudos
Rudos podem aparecer de diversas fontes. Exemplos: tipo de sensor utilizado, iluminao do
ambiente, condies climticas no momento da aquisio da imagem, posio relativa entre o objeto de interesse e a cmera.
Rudo no apenas interferncia no sinal de captura da imagem. So tambm interferncias que possam,
atrapalhar a interpretao ou o reconhecimento de objetos na imagem.
10
Rudos
Imagemnormal
Interferncia de
iluminao
Interferncia do perodo
do ano
Mudana do tipo de sensor
11
SIBGRAPI 2008 Tutorial 3
Filtros
Filtros so as ferramentas bsicas pararemover rudos de imagens. Neste caso, o rudo aquele que aparece no
processo de aquisio da imagem. Podem ser:
Espaciais: filtros que atuam diretamente na imagem.
De frequncia: a imagem transformada para o domnio de frequncia (transformada de Fourier) e ento filtrada neste domnio. Em seguida a imagem filtrada transformada de volta para o domnio de espao.
12
Filtros
Do lado esquerdo uma imagem com rudo, e nadireita a mesma imagem aps filtragem.
13
Domnio de espao
O termo domnio espacial se refere imagem. Mtodos no domnio espacial esto baseados na
manipulao direta dos pixels da prpria imagem.
Os processos no domnio espacial so caracterizados pela seguinte expresso:
onde: f(x,y) a imagem original, T( . ) uma transformao na imagem e g(x,y) a imagem transformada.
)),((),( yxfTyxg
14
Domnio de espao
T uma operao definida sobre uma vizinhana de influncia do pixel que estlocalizado na posio x, y.
A idia de vizinhana de influncia considera os pixels ao redor da posio x, y.
Esta vizinhana definida por uma regio quadrada (ou retangular) e de tamanho (lado) impar.
15
SIBGRAPI 2008 Tutorial 4
Domnio de espao
Regies de vizinhana (mscaras) de tamanhos diferentes, porm, todos com lado impar.
1 x 1
3 x 3
5 x 53 x 5
16
Funo de transformao de intensidade
O operador T computado em umavizinhana de tamanho 1x1. utilizada para alterar a intensidade da imagem. Pode ser aplicada a toda a imagem ou a uma
parte dela. Uma operao bastante til a binarizao
de uma imagem, que utiliza um certo valor de corte (k).
17
Funo de transformao de intensidade
Este tipo de transformao definida pela seguinte expresso:
contrario caso ,ky)f(x, se ,
01
y)g(x,
Imagem binarizada, com o urso em destaque
(maior bloco de pixels com valor
0) . A binarizacao foi obtida com o valor de k=84.
cvThreshold(ImgOrigem, ImgBinaria, 84, 255, CV_THRESH_BINARY);
18
Funo de realce de contraste
Onde, m o valor mdio da regio que se deseja realar o contraste, e E define a inclinao da curva, e conseqentemente os valores de mapeamento para a imagem de sada.
Eyxfmyxg
)),((11),(
f(x,y)
g(x,y)
m0
1
escuro
claro
19
SIBGRAPI 2008 Tutorial 5
Histogramas
Os histogramas so determinados a partir de valores de intensidade dos pixels.
Entre as principais aplicaes dos histogramas esto melhora da definio de uma imagem compresso de imagens segmentao de imagens descrio de uma imagem
20
O histograma de uma imagem I, cujos valores de intensidade estejam entre 0 e G, definido pela expresso:
Histogramas
kk nIh )(
Onde:Ik um valor de intensidade k, (0 k G) da imagem I nk o nmero de pixels na imagem I que possuem a intensidade k.
cvCalcHist( &ImgOrigem, Histograma, 0, NULL );
21
possvel normalizar um histograma, representando os valores em termos de porcentagem:
Histogramas
nn
nIhIp kkk
)()(
Onde n o nmero de pixels da imagem.
cvGetMinMaxHistValue( imgHist, 0, &max_value, 0, 0 );cvScale( Hist->bins, Hist->bins, ((double)cvImgHist->height)/max_value, 0 );
22
esquerda uma imagem I, ao centro o histograma da imagem em valores (h(I)) e em porcentagem (p(I)), direita uma representao do histograma de forma grfica.
Histogramas
0 0 0 1 1
0 0 1 1 2
0 1 1 2 3
1 1 2 3 3
1 2 3 3 3
h(I) =
p(I) =
0 1 2 3
6 9 4 6
6/25 6/254/259/25
0 1 2 3 k
h
23
SIBGRAPI 2008 Tutorial 6
o ajuste dos valores de intensidade de forma a melhorar o contraste em uma imagem.
Equalizao de histogramas
k
jjnMN
Lkeqh0
)1()(_
Onde k a intensidade no histograma equalizado, L o valor mximo de intensidade na imagem, M e N so as dimenses da imagem enj o nmero de pixels na imagem com valor de intensidade igual a j.
cvEqualizeHist( ImagemOriginal, ImagemEqualizada );
24
Equalizao de histogramas
Imagem em nvel de cinza
Mesma imagem
aps equalizao
Histograma da imagem
Histograma equalizado da
imagem
25
Filtros no Domnio Espacial
Correlao:
. . . . . . .
. . . . . . .
. . 5 7 3 . .
. . 6 4 7 . .
. . 2 5 6 . .
. . . . . . .
. . . . . . .
1 2 12 4 2
1 2 1
Posio (x, y) = (4, 4)
Mscara 3 x 3
(1x5) (2x7) (1x3)
(2x6) (4x4) (2x7)
(1x2) (2x5) (1x6)
Produto ponto a ponto
Somatria
5+14+3+12+16+14+2+10+6 =82
. . . . . . .
. . 5 7 3 . .
. . 6 82 7 . .
. . 2 5 6 . .
. . . . . . .
Resultado da Correlao
2
2
2
2),(*),(),(
m
mi
n
njjiwjyixfyxg
26
Convoluo: semelhante correlao, porm neste caso a mscara rotacionada de 180 graus.
Filtros no Domnio Espacial
2
2
2
2),(*),(),(
m
mi
n
njjiwjyixfyxg
Onde w a mscara utilizada no processo de correlao/convoluo, e m e n so as dimenses da mscara.
O tipo de filtro depende dos valores da mscara - em geral, as mscaras sosimtricas e, portanto, pode-se aplicar tanto a convoluo como a correlao.
cvFilter2D( ImgOriginal, ImgFiltrada, filtro, cvPoint(-1,-1) );
27
SIBGRAPI 2008 Tutorial 7
Tipos: mdia, mediana, moda, mnimo e mximo. O filtro de mdia, tambm chamado de filtro-
caixa, um filtro do tipo passa-baixa. O efeito de um filtro passa-baixa de suavizao
da imagem e minimizao dos rudos, atenuandoas transies abruptas que correspondem a frequncias altas porm, o efeito acaba sendo de embassamento ou
borramento da imagem que acaba removendo osdetalhes finos da imagem
Filtros no Domnio EspacialEstatsticos
28
A expresso de um filtro de mdia dada por:
Filtragem no Domnio EspacialFiltros estatsticos
contrario caso 0,2
|y| e 2
|x| se ,1),(nm
mnyxg
Onde m e n so as dimenses de uma mscara qualquer.
h(i,j) = 1/9*1 1 11 1 11 1 1
29
Exemplos de uso de filtro de mdia:
Filtragem no Domnio EspacialFiltros estatsticos
30 Filtragem no Domnio EspacialFiltros estatsticos
h(i,j) = 1/16*1 2 12 4 21 2 1
Filtro mdia com atenuao variando de acordo com a distncia e orientao ao centro da mscara.
31
SIBGRAPI 2008 Tutorial 8
No filtro da mediana os valores dos pixels so ordenados e o valor que ocupa a posio mediana dos valores selecionado para a posio (x, y) da imagem filtrada. Este filtro tende a reduzir o efeito de rudo de pulso, do tipo
salt and peper pois valores pontuais raramente aparecem juntos e portanto nunca ocupam a posio mediana.
Filtragem no Domnio EspacialFiltros estatsticos
32
O filtro de mximo substitui o valor da posio (x, y) pelo valor mximo da mscara. Este filtro tem a tendncia de clarear a imagem.
Analogamente o filtro de mnimo substitui o valor da posio (x, y) pelo valor mnimo da mscara. Este filtro tem a tendncia de escurecer a imagem.
O filtro de moda seleciona para a posio (x, y) da imagem o valor que ocorre com maior frequncia na mscara Este tipo de filtro tende a homogeneizar os valores na imagem.
Filtragem no Domnio EspacialFiltros estatsticos
33
Filtros estatsticos
Filtragem no Domnio EspacialFiltros estatsticos
. . . . . . .
. . 4 6 3 . .
. . 6 4 5 . .
. . 5 7 6 . .
. . . . . . .
4 6 36 4 55 7 6
Mscara 3 x 3 Ordenao
3 4 4 5 5 6 6 6 7
. . . . . . .
. . 4 6 3 . .
. . 6 ? 5 . .
. . 5 7 6 . .
. . . . . . .
? =
Mnimo = 3
Maximo = 7
Mediana = 5
Moda = 6
34 Filtragem no Domnio EspacialFiltros estatsticos
35
SIBGRAPI 2008 Tutorial 9
Um filtro Gaussiano tem os valores da mscara determinados a partir de uma funo bidimensional Gaussiana discreta, com mdia igual a zero e desvio padro , do tipo:
Filtragem no Domnio EspacialFiltros gaussianos
2
22
2 2)(exp(
21),(
yxyxGauss
Onde x e y so as posies na mscara e Gauss(x, y) d o valor a ser colocado na posio (x, y) da mscara.
36
Os filtros Gaussianos so filtros de mdia e so utilizados para suavizar a imagem de forma ponderada e simtrica.
Filtragem no Domnio EspacialFiltros gaussianos
1 4 6 4 1
4 16 24 16 4
6 24 36 24 6
4 16 24 16 4
1 4 6 4 1
Gauss(x,y) = 1/256 *
Mscara Gaussiana para um filtro do tipo passa-baixa.
37
Filtragem no Domnio EspacialFiltros gaussianos
38
O filtro do tipo passa-alta utilizado para realar bordas ou regies de interesse com transies abruptas de intensidade.
O problema deste tipo de filtro que ele geralmente reala tambm rudos do processo de obteno da imagem.
Filtragem no Domnio EspacialFiltros passa-alta
39
SIBGRAPI 2008 Tutorial 10
Filtragem no Domnio Espacial Filtro passa-alta
h(i,j) =
0 1 0
1 4 1
0 1 0
h(i,j) =
1 1 1
1 8 1
1 1 1
Mscara para um filtro do tipo passa-alta, note que a soma dos valores dentro da mscara somam zero.
40 Filtragem no Domnio Espacial Filtro passa-alta
41
Filtragem no Domnio Espacial Exemplo
// Filtro Espacial// criado por Mauricio Marengoni e Denise Stringhini // versao: 1.0, em 08/2008
#include "cv.h" #include "highgui.h" #include int main(){
char name0[ ] = "imagens/ursoPretoCinzaSmall.jpg"; IplImage *cvImagem, *cvImgFiltrada, *cvImgCinza;CvSize tamanhoImagem;CvMat *filtro;int lado=3;double kernel[ ] = { -1, -1, -1,
-1, 8, -1,-1, -1, -1};
cvImagem = cvLoadImage( name0, -1 );tamanhoImagem.width=cvImagem->width;tamanhoImagem.height=cvImagem->height;cvImgFiltrada=cvCreateImage(tamanhoImagem, IPL_DEPTH_8U, 1); cvImgCinza=cvCreateImage(tamanhoImagem, IPL_DEPTH_8U, 1); cvCvtColor(cvImagem, cvImgCinza, CV_BGR2GRAY);
//Create convolution filterfiltro = cvCreateMatHeader( lado, lado, CV_64FC1 );cvSetData( filtro, kernel, lado*8 );//Call OpenCV convolution:cvFilter2D( cvImgCinza, cvImgFiltrada, filtro, cvPoint(-1,-1) );//salva imagem filtradacvSaveImage("imagens/ursoPretoPassaAlta2.jpg",cvImgFiltrada);
return( 0 ); }
42
Domnio de Freqncia
possvel fazer uma troca de base em uma imagem e represent-la em termos uma soma ponderada infinita de um conjunto de senides. Mudanas rpidas na imagem so representadas
por freqncias altas. Mudanas suaves so representadas por
frequncias baixas. Esta mudana de base pode ser feita
utilizando a transformada de Fourier.
43
SIBGRAPI 2008 Tutorial 11
Expresses que computam a transformadade Fourier:
Domnio de Freqncia
)(2),(),( vyuxjeyxfvuF
1
0
1
0)(2),(),( M
x
N
yNyvMxujeyxfvuF
Modo contnuo
Modo discreto
A expresso discreta a utilizada na DFT (Discrete Fourier Transform) quegeralmente usada na implementao em computador da transformada de Fourier.
44
Pode ser mostrado que o processo de convoluo no domnio espacial correspondea multiplicao de duas expresses no domnio de frequncia, isto :
Domnio de Freqncia
),(*),(),(),(**),(),( srWvuFvuGjiwyxfyxg
Onde ** indica a convoluo entre a imagem f(x,y) com a mscara w(i,j)G(u,v) a transformada de Fourier de g(x,y), que o produto de F(u,v) por W(r,s) F(u,v) a transformada de Fourier de f(x,y)W(r,s) a transformada de Fourier de w(i,j)
45
Domnio de FreqnciaProcesso de filtragem
1. Dada uma imagem f(x,y) de tamanho M x N, obter uma imagem com entorno fp(x,y) de tamanho P x Q onde P = 2M e Q = 2N preenchida com zeros no entorno.
2. Multiplique fp(x,y) por (-1)(x+y) para centralizar a transformada.
3. Determinar a DFT da imagem obtida em b.4. Criar um filtro simtrico H(u,v) de tamanho
P x Q com centro em (P/2,Q/2)
46
5. Fazer o produto H(u,v)*F(u,v) obtido na etapa 3.
6. Obter a imagem no domnio de espao fazendo o inverso da transformada de Fourier gp(x,y).
7. Multiplicar gp(x,y) por (-1)(x+y) 8. Remover o entorno da imagem obtendo
ento g(x,y), que a imagem filtrada.
Domnio de FreqnciaProcesso de filtragem (cont.)
47
SIBGRAPI 2008 Tutorial 12
A expresso que determina o inverso da transformada de Fourier discreta dada por:
Domnio de Freqncia
1
0
1
0)(2),(1),( M
u
N
vNyvMxujevuF
MNyxf
Portanto, definir um filtro no domnio de frequncia corresponde a encontrar uma mscara para ser utilizada em conjunto com a imagem transformada e assim obter a imagem filtrada desejada.
48
Um filtro passa-baixa ideal dado pela expresso:
Domnio de FreqnciaFiltros Passa-baixa
contrario caso 0,
F v)F(u, se ,1),( 0vuH
Onde F0 uma frequncia de corte.
Este filtro faz um corte abrupto em uma certa frequncia, por isso o nome de filtro ideal.
49
Domnio de FreqnciaFiltros Passa-baixa
50
Outro filtro do tipo passa-baixa o filtro de Butterworth cuja expresso dada por:
Domnio de FreqnciaFiltros Passa-baixa
nFvuFvuH 2
0 )/),((11),(
Onde n define a ordem do filtro de Butterworth. Este valor indica a forma de atenuao da freqncia a partir da origem do filtro.
51
SIBGRAPI 2008 Tutorial 13
O filtro Gaussiano no domnio de freqncia dado pela seguinte expresso:
Domnio de FreqnciaFiltros Passa-baixa
22 2/),(),( vuFevuH O filtro Gaussiano obtm uma atenuao menos suave que o filtrode Butterworth para a mesma frequncia de corte.
52
Filtro passa-alta ideal:
Domnio de FreqnciaFiltros Passa-alta
contrario caso 0,
F v)F(u, se ,1),( 0vuH
Filtro passa-alta de Butterworth:
nvuFFvuH 2
0 )),(/(11),(
Filtro passa-alta Gaussiano:22 2/),(1),( vuFevuH
53
Domnio de FreqnciaFiltros Passa-alta
54
Segmentao de Imagens
Segmentao : Partio da imagem em regies que
possuem algum tipo de semelhana. Etapa inicial no processo de identificao
de objetos numa imagem. Existem diversas tcnicas para segmentar
uma imagem.
55
SIBGRAPI 2008 Tutorial 14
Segmentao de Imagens56
Segmentao de Imagens
Tcnicas de Segmentao : Deteco de Bordas Por Corte Baseada em Regies Limiarizao Movimento
57
Reconhecimento de Objetos
O reconhecimento de objetos oupadres em uma imagem um dos principais objetivos de um processo de viso computacional.
Existem diversas tcnicas para fazerreconhecimento de padres, geralmente agrupadas como: Estruturais Baseados em teoria da deciso
58
Reconhecimento de Objetos59
SIBGRAPI 2008 Tutorial 15
Reconhecimento de Objetos60
Reconhecimento de Objetos61
Reconhecimento de Objetos
Reconhecimento de objetos baseadoem teoria da deciso: Classificador de distncia mnima. Correlao Classificadores Estatsticos Redes Neurais
Reconhecimento de objetos baseadoem estruturas: Baseado em Forma.
62
Rastreamento de Objetos
Rastreamento de Objetos umaoperao utilizada para, uma vezidentificado um objeto, acompanh-lo em uma seqncia de imagens.
Existem diversas aplicaes para o rastreamento: Comportamentos Verificao de visada Segurana
63
SIBGRAPI 2008 Tutorial 16
Rastreamento de Objetos64
Exemplo: camshiftdemo.c
CamShift (Continuously Adaptive Mean-SHIFT) um algoritmo desenvolvido para o rastreamento de cor, possibilitando tambm o rastreamento de faces.
baseado numa tcnica estatstica onde se busca o pico entre distribuies de probabilidade em gradientes de densidade.
Esta tcnica chamada de mdia por deslocamento (mean shift) e foi adaptada no CamShift para tratar a mudana dinmica das distribuies de probabilidade das cores numa seqncia de vdeo.
65
Exemplo: camshiftdemo.c
Para cada frame, a imagem (raw) convertida para outra de distribuio de probabilidade de cor atravs de um modelo de histograma da cor da pele (no caso de rastreamento de faces).
O centro e o tamanho da face que se quer rastrear so encontrados atravs do CamShift operando na imagem de probabilidade de cores.
O tamanho e a localizao corrente da face so informados e usados para definir o tamanho e a localizao da janela de busca da prxima imagem de vdeo.
66 Exemplo: camshiftdemo.cInicializao do programa
int main( int argc, char** argv ){CvCapture* capture = 0;if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
//inicializa a captura de vdeo a partir de uma cmeracapture = cvCaptureFromCAM(argc == 2 ? argv[1][0] - '0' : 0 );
else if( argc == 2 )//inicializa a captura de vdeo a partir de um arquivo de vdeocapture = cvCaptureFromAVI( argv[1] );
if( !capture ){fprintf(stderr,"Could not initialize capturing...\n");return -1;
}printf( "Hot keys: \n //);
cvNamedWindow( "Histogram", 1 ); //cria a janela para o histogramacvNamedWindow( "CamShiftDemo", 1 ); //cria a janela para o rastreamento
//associa a funo on_mouse janela de rastreamentocvSetMouseCallback( "CamShiftDemo", on_mouse, 0 );
//cria os 3 sliders para ajuste dos parmetros (janela CamShiftDemo)cvCreateTrackbar( "Vmin", "CamShiftDemo", &vmin, 256, 0 );cvCreateTrackbar( "Vmax", "CamShiftDemo", &vmax, 256, 0 );cvCreateTrackbar( "Smin", "CamShiftDemo", &smin, 256, 0 );
67
SIBGRAPI 2008 Tutorial 17
Exemplo: camshiftdemo.cJanelas criadas
68 Exemplo: camshiftdemo.cDefinio do objeto (funo on_mouse)
69
Exemplo: camshiftdemo.cTrechos selecionados
cvInRangeS: verifica se os elementos em hsv (previamente convertida a partir da imagem RGB obtida do frame original) esto entre os dois escalares indicados nos parmetros 2 e 3. O parmetro mask a imagem destino que armazenar os pixels que interessaro no clculo do histograma.
cvSplit: retira um dos canais e armazena na imagem de hue (matiz), que ser usada no clculo do histograma e da sua projeo de fundo (retro-projeo ou back projection).
cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
cvSplit( hsv, hue, 0, 0, 0 );
70 Exemplo: camshiftdemo.cTrechos selecionados
cvCalcBackProject: calcula a projeo de fundo (retro-projeo) do histograma baseado na imagem de matiz (hue).
cvAnd: calcula um E lgico entre a imagem de fundo do histograma e a mscara calculada anteriormente (que possui os pixels de interesse) - o resultado novamente armazenado na imagem de fundo do histograma (backproject).
cvCamShift: chama o algoritmo CamShift para buscar o centro, o tamanho e a orientao do objeto sendo rastreado e armazenar em track_comp.
cvCalcBackProject( &hue, backproject, hist );cvAnd( backproject, mask, backproject, 0 );cvCamShift( backproject, track_window,
cvTermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 0, 1), &track_comp, &track_box );
71
SIBGRAPI 2008 Tutorial 18
Exemplo: camshiftdemo.cTrechos selecionados
track_window recebe a rea retangular onde est inserido o objeto rastreado e uma elipse desenhada ao redor do objeto.
track_window = track_comp.rect; if( backproject_mode )
cvCvtColor( backproject, image, CV_GRAY2BGR );if( image->origin )
track_box.angle = -track_box.angle;cvEllipseBox(image, track_box, CV_RGB(255,0,0), 3,CV_AA, 0);
72 Exemplo: camshiftdemo.cObjeto detectado
73
Exemplo: camshiftdemo.cObjeto rastreado
74
Ajuste do ambiente do OpenCV
75
SIBGRAPI 2008 Tutorial 19
Windows
Ajustar a PATH para a biblioteca: Em Meu Computador use o boto direito do mouse e
selecione Propriedades.
Clique na aba Avanado e aps no boto de Variveis do Ambiente na parte inferior da janela (no Vista ainda ser necessrio seguir o link Advanced System Settings antes deste passo).
76
Windows
Ajustar a PATH para a biblioteca (cont.): Nas Variveis do usurio est a PATH, edite-a para
acrescentar o local onde a biblioteca OpenCV foi instalada o caminho padro
C:\Arquivos de Programa\OpenCV\bin
Acrescente tambm o caminho para a biblioteca de interface o caminho padro
C:\ Arquivos de Programa\OpenCV\otherlibs\highgui
Lembre-se de separ-las utilizando ;.OBS: possvel que a PATH do OpenCV seja atualizada automaticamente
durante a instalao, mas necessrio verificar.
77
Windows
Visual Studio 2005
Abrir o ambiente do Visual Studio 2005. Abrir o arquivo opencv.sln na pasta _make da
instalao (C:\Arquivos de Programa\OpenCV\_make). Isto deve carregar toda a soluo do OpenCV no ambiente do Visual Studio 2005.
Selecionar a opo Build no menu e clicar em build-solution para compilar a biblioteca. Esta compilao pode levar algum tempo.
78
WindowsDevCPP
Abrir o Bloodshed Dev-C++ (verso testada: 4.9.9.2).
Para ligar (link) os programas desenvolvidos no Dev C++ com as bibliotecas do OpenCV:
Clicar em Tools e selecionar Compiler Options. O sistema deve abrir uma janela com a aba Compilerselecionada.
Marcar o box Add these commands to the linker command line e copiar os seguintes comandos: -lhighgui -lcv -lcxcore -lcvaux lcvcam
79
SIBGRAPI 2008 Tutorial 20
Windows
DevCPP (cont.) Na aba Directories, em Binaries adicionar o caminho:
C:\Arquivos de Programa\OpenCV\bin. Em C Includes adicionar os caminhos:
C:\Arquivos de Programa\OpenCV\cxcore\include;C:\Arquivos de Programa\OpenCV\cv\include;C:\Arquivos de Programa\OpenCV\otherlibs\highgui;C:\Arquivos de Programa\OpenCV\cvaux\include; C:\Arquivos de Programa\OpenCV\otherlibs\cvcam\include
Em C++ Includes adicionar os mesmos caminhos acima.
Em Libraries adicionar o caminho: C:\Arquivos de Programa\OpenCV\lib
80
Windows
Testar a instalao no Windows
Abrir o ambiente de trabalho escolhido e carregar o arquivo: C:\Arquivos de Programa\OpenCV\samples\c\contours.c.
Criar um novo arquivo de programa em branco: teste.cpp.
Copiar e colar todo o arquivo contours.c para o arquivo em branco teste.cpp, salve o arquivo teste.cpp.
Compilar e executar o programa teste.cpp. Este programa analisa uma imagem sinttica com faces e extrai
regies diferentes da imagem. Pode-se alterar parmetros ou linhas do cdigo e ver os resultados. (No esquecer de recompilar o programa aps as alteraes).
81
Linux e g++
Entrar com login de super-usurio.
Ir ao diretrio onde foi feito o download do arquivo tar.gz do OpenCV.
Na janela aberta, digitar os seguintes comandos:tar -xzf opencv-0.9.7.tar.gzcd opencv-0.9.7./configure && make && make install
82
Linux e g++
Fazer os ajustes para o G++:
Ir ao diretrio home e abrir o arquivo .bashrc(para o ambiente bash).
Acrescentar a seguinte linha ao arquivo:alias gcv="g++ -I/usr/local/include/opencv -lcv -lcxcore -lcvaux -lhighgui"
83
SIBGRAPI 2008 Tutorial 21
Linux e g++
Testar a instalao no Linux Ir ao diretrio onde est instalado o OpenCV.
Procurar o sub-diretrio samples e entrar no sub-diretrio c.
Digitar a linha de comando abaixo que deve executar o programa contours.c:
gcv contours.c && ./a.out
84
SIBGRAPI 2008 Tutorial 22