simpósio unicruz: opencv + python (parte 1)

Post on 19-Feb-2017

203 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Construindo Máquinas que Veem:Uma Introdução ao Mundo da Visão

Computacional

II Simpósio de Pesquisa e Desenvolvimento em Computação11 e 12 de maio de 2016

MEng. Cristiano Rafael Steffens

Sobre mim:• Mestre em Eng. de Computação – FURG• Professor • Bolsista DTI – CAPES• Consultor na S-Project• Áreas de interesse:

– Robótica para aplicações industriais– Visão Computacional– Sistemas de medição baseados em visão– Aprendizagem de máquina

CristianoSteffens@furg.brCristiano@sproject.com.br

Agenda• O que é a OpenCV?• Como instalar?• A linguagem Python• Hello World• O que podemos fazer com OpenCV?

O que é OpenCV?• OpenCV (Open Source Computer Vision) é

uma biblioteca de programação com funções de visão computacional de tempo real.

• Distribuída sob a licença BSD.• Possui interfaces para C/C++, Python.• Possui suporte para Windows, Linux Android e

Mac OS.

Como instalar a OpenCV?• Software necessário:

– Python27– numpy-1.8.2-win32-superpack-python2.7– matplotlib-1.3.0.win32-py2.7– OpenCv 3.1.0

• Passo a passo: docs.opencv.org/3.1.0/d5/de5/tutorial_py_setup_in_windows.html

Como instalar a OpenCV?• Software necessário (parte 1):

– $ sudo apt-get install build-essential cmake git pkg-config– $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev

libpng12-dev– $ sudo apt-get install libgtk2.0-dev– $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-

dev libv4l-dev– $ sudo apt-get install libatlas-base-dev gfortran– $ wget https://bootstrap.pypa.io/get-pip.py– $ sudo python get-pip.py– $ sudo apt-get install python2.7-dev– $ pip install numpy

Como instalar a OpenCV?• Software necessário (parte 2):

– $ cd ~– $ git clone https://github.com/Itseez/opencv.git– $ cd opencv– $ git checkout 3.1.0

– $ cd ~– $ git clone https://github.com/Itseez/opencv_contrib.git– $ cd opencv_contrib– $ git checkout 3.1.0

Como instalar a OpenCV?• Software necessário (parte 3):

– $ cd ~/opencv– $ mkdir build– $ cd build– $ cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \-D INSTALL_C_EXAMPLES=OFF \-D INSTALL_PYTHON_EXAMPLES=ON \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \-D BUILD_EXAMPLES=ON ..

– $ make -j4– $ sudo make install– $ sudo ldconfig

Como instalar a OpenCV?• Máquina virtual do ROS:

– Download em: http://nootrix.com/2014/09/ros-indigo-virtual-machine/

– Se estiver utilizando Virtual Box precisa instalar o Extension Pack para habilitar USB 2.0 *

– Para habilitar o uso da webcam do computador é necessário a instalação do Cheese, GUVCView e os drivers da câmera.

– Mais informações podem ser encontradas em: https://siddhantahuja.wordpress.com/2011/07/20/working-with-ros-and-opencv-draft/

A linguagem PythonPython é uma linguagem de programação poderosa e de fácil aprendizado. Possui estruturas de dados de alto nível eficientes, bem como adota uma abordagem simples e efetiva para a programação orientada a objetos. Sua sintaxe elegante e tipagem dinâmica, além de sua natureza interpretada, tornam Python ideal para scripting e para o desenvolvimento rápido de aplicações em diversas áreas e na maioria das plataformas.

A linguagem Python - Números>>> 2+24>>> # Isto é um comentário... 2+24>>> (50-5*6)/45>>> # A divisão entre inteiros arredonda para baixo:... 7/32>>> 7/-3-3

A linguagem Python - Números>>> 7.0 / 23.5>>> largura = 20>>> algura = 5*9>>> largura * altura900

>>> # Zerar x, y, z>>> x = y = z = 0

A linguagem Python - Strings>>> 'spam eggs''spam eggs'>>> 'doesn\'t'"doesn't">>> "doesn't""doesn't">>> '"Yes," he said.''"Yes," he said.'>>> "\"Yes,\" he said."'"Yes," he said.'>>> '"Isn\'t," she said.''"Isn\'t," she said.'

A linguagem Python - Strings>>> palavra = 'Ajuda' + 'Z'>>> palavra'AjudaZ'>>> '<' + palavra*5 + '>''<AjudaZAjudaZAjudaZAjudaZAjudaZ>‘>>> palavra[4]'a'>>> palavra[0:2]'Aj'>>> palavra[2:4]'ud‘>>> 'x' + palavra[1:]'xjudaZ‘>>> len(palavra)7

A linguagem Python - Listas>>> a[0]'spam'>>> a[3]1234>>> a[-2]100>>> a[1:-1]['eggs', 100]>>> a[:2] + ['bacon', 2*2]['spam', 'eggs', 'bacon', 4]>>> 3*a[:3] + ['Boo!']['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']

A linguagem Python - Listas>>> a['spam', 'eggs', 100, 1234]>>> a[2] = a[2] + 23>>> a['spam', 'eggs', 123, 1234]

>>> remover itens da lista>>> a[0:2] = []

A linguagem Python - Repetiçãoa, b = 0, 1>>> while b < 10:

print b a, b = b, a+b

A linguagem Python - Decisão>>> x = int(raw_input("Favor digitar um inteiro: "))Favor digitar um inteiro: 42>>> if x < 0:

x = 0 print 'Negativo alterado para zero'

elif x == 0: print 'Zero' elif x == 1: print 'Unidade' else: print 'Mais'

A linguagem Python - For>>> # Medir o tamanho de algumas strings:>>> a = ['gato', 'janela', 'defenestrar']>>> for x in a: print x, len(x) gato 4janela 6defenestrar 11

A linguagem Python - For>>> for n in range(2, 10): for x in range(2, n): if n % x == 0: print n, '=', x, '*', n/x break else: # laço terminou sem encontrar um fator print n, 'é um número primo'2 é um número primo3 é um número primo4 = 2 * 25 é um número primo6 = 2 * 37 é um número primo8 = 2 * 49 = 3 * 3

A linguagem Python - Funções>>> def fib(n): # escrever série de Fibonacci até n """Exibe série de Fibonacci até n""" a, b = 0, 1 while a < n: print a, a, b = b, a+b >>> # Agora invocamos a função que acabamos de definir: fib(2000)

A linguagem Python - Funções>>> def fib2(n): # devolve a série de Fibonacci até n """Devolve uma lista a com série de Fibonacci até n.""" resultado = [] a, b = 0, 1 while a < n: resultado.append(a) # veja mais adiante a, b = b, a+b return resultado >>> f100 = fib2(100) # executar>>> f100 # exibir o resultado

Python - NumpyNumPy é um pacote de Python que suporta operações com vetores e matrizes e é essencial para a computação científica com Python. É baseado em C, portanto tem um desempenho superior se comparado às operações com vetores originais do Python.

Python - Numpy>>> import numpy as np>>> a = np.array([0,1,2,3,4,5])>>> type(a)>>> a = np.array([[0,1,2,3], [4,5,6,7], [8,9,10,11]])>>> a.shape(3,4)

Python - Numpy>>> a[1,3] # acessa uma posição>>> a[0,3:5] # pega parte da matriz>>>a[:,2] #pega parte da matriz>>> a.transpose() # matriz transposta>>> np.sum(a) # soma dos elementos>>> a.sum() #soma dos elementos>>> np.amin(a) # menor valor>>> a.argmin() # índice do menor valor>>> np.amax(a) # maior valor>>> a.flat[:] # array como vetor

Aplicações da OpenCV• A biblioteca OpenCV é dividida em módulos

– core - define as principais estruturas de dados utilizadas pela biblioteca. Ex.: Mat e Point.

– improc - Módulo de processamento de imagem que inclui filtros lineares e não lineares além de transformações geométricas.

– highgui - Módulo com funções de interface como criação de janelas.– objdetect - Módulo com funções de detecção de objetos. Ex: haar,

cascade classifiers.– ml – Módulo com funções de Machine Learning. Ex: classificadores de

árvore, knn, redes neurais, svm e classificadores bayesianos.– video – Módulo com funções de processamento de video. Ex:

KalmanFilter.

• A lista completa pode ser obtida em http://docs.opencv.org/modules/refman.html

Importante!! Mat

Importante!! cv::Mat# Operador de atribuiçãoa = b;# Mostrar no consoleprint(a);# Clonar uma matrizb = np.copy(a);# utilizar parte de uma matriz definindo uma região de interesseb = a[0:100,0:100];# Criando uma Matb = np.zeros((2,2,3), np.uint8);b = np.ones((2,2,3), np.float32);# Alterar uma posição (branco)a[1,1] = 255;# altera o canal de cor verde para o valora[1,1,2] = 255;

Olá turma!! # imports da opencvimport cv2

# lê a imagem para uma matrizimage = cv2.imread("unicruz.png");

# cria uma janela para mostrar a imagemcv2.namedWindow("Tutorial OpenCv - Unicruz");

# mostra a imagemcv2.imshow("Tutorial OpenCv - Unicruz", image);

# renderiza e aguarda entrada do tecladocv2.waitKey()

#fecha todas as janelascv2.destroyAllWindows();

Olá mundo!! # imports da opencvimport cv2

# lê a imagem para uma matrizimage = cv2.imread("unicruz.png");

#converte para escala de cinzagray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY);

# cria uma janela para mostrar a imagemcv2.namedWindow("Tutorial OpenCv - Unicruz");cv2.imshow("Tutorial OpenCv - Unicruz", gray_image);

# renderiza e aguarda entrada do tecladocv2.waitKey()cv2.destroyAllWindows();

Realçando uma imagemimage = cv2.imread("E:/trash/img.jpg");if (image.size>0)): # cria a versão suavizada blured = cv2.blur(image, (5,5)) # adiciona ao original (unsharp filter) sharp = cv2.addWeighted(image, 1.5, blured, 0,6); # calcula a diferença entre as imagens diference = cv2.absdiff(image, sharp); # mostra a imagem cv2.imshow("Original", image); cv2.imshow("Blured", blured); cv2.imshow("Sharp", sharp); cv2.imshow("diference", diference); # salva as imagens em arquivo cv2.imwrite("sharp.png", sharp); cv2.waitKey();

Encontrando Bordasimage = cv2.imread("unicruz.png");gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY);

# Remove o ruído da imagem utilizando um filtro 3x3gray_image = cv2.blur(gray_image, (5,5))

# Detector de bordas de Canny # origem, threshold baixo, threshold alto;edges = cv2.Canny(gray_image, 100, 200);

# mostra a saídacv2.imshow("Bordas", edges); cv2.waitKey();

That’s it for today!

• CristianoSteffens@furg.br • Cristiano@SProject.com.br

top related