Introdução ao processamento de imagens com OpenCV (cont)

11
Uma Rápida Introdução ao OpenCV (cont.) Cristiano Rafael Steffens [email protected] Universidade Federal do Rio Grande – FURG Centro de Ciências Computacionais

Transcript of Introdução ao processamento de imagens com OpenCV (cont)

Page 1: Introdução ao processamento de imagens com OpenCV (cont)

Uma Rápida Introdução ao OpenCV (cont.)Cristiano Rafael Steffens

[email protected]

Universidade Federal do Rio Grande – FURG

Centro de Ciências Computacionais

Page 2: Introdução ao processamento de imagens com OpenCV (cont)

Revisão

Quais os principais tipos de dados da OpenCV?

Quais são módulos da OpenCV?

Qual o namespace da OpenCV?

Para que são utilizados os comandos imread, imwrite, imshow, cvtColor, blur, GaussianBlur, normalize, erode, dilate?

Page 3: Introdução ao processamento de imagens com OpenCV (cont)

Onde posso encontrar outros exemplos?

Tutoriais oficiais: http://docs.opencv.org/doc/tutorials/tutorials.html

OCR, integração com Web (HTML, Javascript), solucionador de labiririnto e outros projetos interesantes: http://opencv-code.com

Page 4: Introdução ao processamento de imagens com OpenCV (cont)

Importante!! cv::Mat

Page 5: Introdução ao processamento de imagens com OpenCV (cont)

Desenhar um quadrado preto com um “X”, um círculo e um retângulo

/// Cria uma matriz zerada do tamanho

Mat minha_imagem = Mat::zeros(tamanho,tamanho, CV_8UC1);

for(int y = 0; y < minha_imagem.rows; y++)

{

for(int x = 0; x < minha_imagem.cols; x++)

{

if(x==y || (tamanho-x) == y)

minha_imagem.at<uchar>(x,y) = 255;

}

}

///Desenha um cíurculo no centro com raio 0.20

circle(minha_imagem, Point(tamanho/2, tamanho/2), tamanho/5, Scalar::all(127), 1);

/// Desenha um retângulo

rectangle(minha_imagem, Point(tamanho/4, tamanho/4), Point(3*tamanho/4, 3*tamanho/4),Scalar::all(200), 1);

Page 6: Introdução ao processamento de imagens com OpenCV (cont)

Detectar círculos utilizando a transformada de Hough

/// src_gray: Input image (grayscale)

/// circles: A vector that stores sets of 3 values: x_{c}, y_{c}, r for each detected circle.

/// CV_HOUGH_GRADIENT: Define the detection method. Currently this is the only one available in OpenCV

/// dp = 1: The inverse ratio of resolution

/// min_dist = src_gray.rows/8: Minimum distance between detected centers

/// param_1 = 200: Upper threshold for the internal Canny edge detector

/// param_2 = 100*: Threshold for center detection.

/// min_radius = 0: Minimum radio to be detected. If unknown, put zero as default.

/// max_radius = 0: Maximum radius to be detected. If unknown, put zero as default

HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, 1, src_gray.rows/16, 200, 100, 0, 0 );

Page 7: Introdução ao processamento de imagens com OpenCV (cont)

Filtros Lineares

Funções:

Blur

GaussianBlur

medianBlur

bilateralFilter

Page 8: Introdução ao processamento de imagens com OpenCV (cont)

Threshold

Binary

Binary Inverted

Truncate To Zero

To Zero Inverted

Page 9: Introdução ao processamento de imagens com OpenCV (cont)

Trabalhando com Vídeos// lê video que veio no primeiro argumento

VideoCapture cap( argv[1] );

if ( !cap.isOpened() ){ cout << "Cannot open the video file" << endl; return -1; }

Mat frame;

// enquanto existirem frames

while( cap.read(frame) )

{

// mostra a imagem

imshow("Video", frame);

// espera até que um esc seja pressionado

if(waitKey(30) == 27)

{ break; }

}

Page 10: Introdução ao processamento de imagens com OpenCV (cont)

HistogramasDefinição:

Um histograma é uma ferramenta de análise e representação de dados quantitativos, agrupados em classes de frequência que permite distinguir a forma, o ponto central e a variação da distribuição, além de outros dados como amplitude e simetria na distribuição dos dados.

Documentação:

http://docs.opencv.org/modules/imgproc/doc/histograms.html

Page 11: Introdução ao processamento de imagens com OpenCV (cont)

Pretty cool! Huh!