Introdução ao processamento de imagens com OpenCV (cont)
1. Uma Rápida Introdução
ao OpenCV (cont.)
Cristiano Rafael Steffens
cristianosteffens@furg.br
Universidade Federal do Rio Grande – FURG
Centro de Ciências Computacionais
2. 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?
3. 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
5. 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);
6. 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 );
9. 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; }
}
10. Histogramas
Definiçã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