



Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Contem comandos da biblioteca Opencv
Tipologia: Notas de estudo
1 / 7
Esta página não é visível na pré-visualização
Não perca as partes importantes!




Objectivo:
Este tutorial tem como objectivo “colocar em papel” as nossas descobertas mais recentes relativamente à biblioteca OpenCV, que iremos aplicar no nosso trabalho. OpenCV significa Intel Open Source Computer Vision Library e consiste numa colecção de funções C e algumas classes C++ que implementam alguns algoritmos bastante conhecidos, relativos ao processamento de imagem. Aqui encontrar-se-ão os passos necessários para conseguir aplicações básicas de processamento de imagem e o source code das mesmas.
Pode efectuar o download desta biblioteca em:
Para os exemplos demonstrados abaixo, foi utilizada a versão Beta 5 desta biblioteca, em framework .NET, Visual Studio 2003 e utilizando DirectX 9.0.
Primeiros passos – Configuração do projecto:
Para realizar um primeiro programa simples, utilizando o OpenCV, necessita de seguir os seguintes passos:
o “(path referente ao directório do OpenCV)\cvaux\include” o “(path referente ao directório do OpenCV)\cvaux\otherlibs\highgui” o “(path referente ao directório do OpenCV)\cxcore\include” o “(path referente ao directório do OpenCV)\cv\include”
Figura 1 - "Includes" necessários
o “(path referente ao directório do OpenCV \bin” o “(path referente ao directório do OpenCV)\lib”
Figura 2 - Additional Libraries
Windows bitmaps - BMP, DIB; JPEG files - JPEG, JPG, JPE; Portable Network Graphics
De seguida, iremos criar uma janela, na qual será apresentada a imagem, para isso:
cvNamedWindow("contours",CV_WINDOW_AUTOSIZE);
O primeiro argumento é o nome da janela, o segundo é a flag relativa à forma como a janela se comporta,neste caso é “ autosize ”, ou seja adequa-se ao tamanho da imagem. Falta agora visualizar a imagem o que é feito através da função:
cvShowImage("contours",image);
Isto é feito depois de testar se o load da imagem retornou uma imagem válida e dentro de um ciclo “ for ”, que só será terminado caso a tecla “Esc” seja premida, o que permite ao utilizador sair da aplicação.
Assim, este pedaço de código terá o seguinte aspecto:
if(image){ for(;;){ cvShowImage("contours",image);
if(cvWaitKey(10) >= 0){ break; } } }
Por último é necessário libertar os recursos utilizados, neste caso, a imagem e a janela onde foi apresentada.
cvReleaseImage(&image); cvDestroyWindow("contours");
Source Code – Exemplo 1: http://web.tagus.ist.utl.pt/~alexandra.ribeiro/TFC/OpenCV/exemplo1-tutorialOpenCV.rar
Exemplo 2 – aplicação de um algoritmo a uma imagem (Canny):
Neste exemplo, iremos aplicar à imagem do exemplo anterior um algoritmo de processamento de imagem, conhecido como Algoritmo de Canny, que nos permite obter a visualização dos contornos da mesma. Por fim, iremos também salvar a imagem resultante da aplicação do algoritmo para um ficheiro.
Depois de ter feito o load da imagem à qual queremos aplicar o algoritmo, temos de transformá-la numa imagem do tipo grayscale (excepto se a imagem já for deste tipo), dado que este algoritmo é aplicado a imagens que possuam apenas um canal. Para isto, é criada uma nova imagem, com o tamanho da imagem original e apenas com um canal (não esquecer de inicializar a respectiva variável, tal como foi feito com a imagem original).
image_gray= cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);
Os parâmetros são os seguintes:
Será em image_gray que depositaremos o resultado da conversão de cor, do modelo RGB (com 3 canais) para grayscale, da seguinte forma:
cvCvtColor(image, image_gray, CV_RGB2GRAY);
onde os parametros são a imagem original, a imagem que conterá o resultado da conversão e o tipo de conversão, respectivamente.
Depois de obtida a imagem, com apenas um canal, podemos aplicar então o algoritmo de Canny, para a detecção de contornos. Para esse efeito, é criada uma nova imagem, onde irá ser depositado o resultado da aplicação do algoritmo de Canny.
image_contours = cvCreateImage(cvSize(image_gray->width,image_gray->height), IPL_DEPTH_8U,image_gray->nChannels);
Aplicaremos agora o algoritmo, passando como parâmetros a imagem grayscale, a imagem que guardará os contornos encontrados, o valor do primeiro threshold, o valor do segundo threshold e o apertureSize, que tem, por omissão, o valor 3.
cvCanny(image_gray, image_contours, 0,255, 3);
É então mostrado o resultado, que se encontra armazenado na variável image_contours. Por fim, é feita a libertação de recursos, tal como no exemplo anterior.
Source Code – Exemplo 2: http://web.tagus.ist.utl.pt/~alexandra.ribeiro/TFC/OpenCV/exemplo2-tutorialOpenCV.rar
Este teste verifica se a origem da imagem a copiar tem a sua origem (como é normal) no canto superior esquerdo. Caso isso aconteça, a imagem pode ser copiada directamente. Caso contrário é aplicado uma rotação à imagem, em torno do eixo dos XX, de forma a ser copiada corretamente.
if(frame->origin == IPL_ORIGIN_TL){ cvCopy(frame, frame_copy, 0); } else{ cvFlip(frame, frame_copy, 0); }
Por último poderíamos chamar uma função de aplicação de filtros, por exemplo. Seria algo como:
applyFilterToFrame(frame_copy);
Não esquecer de declarar os cabeçalhos desta função, no início do ficheiro!
Source Code – Exemplo 3: http://web.tagus.ist.utl.pt/~alexandra.ribeiro/TFC/OpenCV/exemplo3-tutorialOpenCV.rar
Bibliografia:
[1]– OpenCVDocumentation http://www.cs.bham.ac.uk/resources/courses/robotics/doc/opencvdocs/
[2] – OpenCV Tutorial, by R. Laganiere http://www.site.uottawa.ca/~laganier/tutorial/opencv+directshow/