Top Ad unit 728 × 90

Recientes

recent

Curso OpenCV y C++ con Visual Studio 2013 (3-25) - Dibujar Formas y Texto OpenCV y C++

En OpenCV existen varias funciones con las que podemos crear imágenes, dibujar textos sobre estas imágenes, implementar figuras geométricas o formas más complejas. En este artículo veremos cómo implementar figuras y textos sobre una imagen vacía.

Lo primero que necesitamos es crear una imagen (Clase Mat)  donde implementaremos nuestras figuras geométricas, el siguiente código crea un objeto de la clase Mat que representa nuestra imagen en OpenCv de 800x600 pixeles, CV_8UC3 de 3 canales BGR de 8 Bits sin signo, y cuyo valor BGR represente el color blanco.
cv::Mat imagen(rows, columns, CV_8UC3, cv::Scalar(255, 255, 255));
rows:  cantidad de filas o pixeles de alto que tendrá nuestra imagen 600.
cols: cantidad de columnas o pixeles de ancho de nuestra imagen 800.
CV_8UC3: puede ser alguno de los valores mencionados abajo seguido de C3 para tres canales, o C1, C2, C4 para 1, 2, 4, canales respectivamente:
  • CV_8U - 8-bit unsigned integers ( 0..255 )
  • CV_8S - 8-bit signed integers ( -128..127 )
  • CV_16U - 16-bit unsigned integers ( 0..65535 )
  • CV_16S - 16-bit signed integers ( -32768..32767 )
  • CV_32S - 32-bit signed integers ( -2147483648..2147483647 )
  • CV_32F - 32-bit floating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
  • CV_64F - 64-bit floating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )

cv::Scalar(): Scalar representa el color de la imagen en formato BGR, podemos establecer un color diferente estableciendo los diferentes canales de este modo: Scalar(azul, verde, rojo).


cv::circle: Permite dibujar un círculo. La función circle necesita como parámetros la imagen sobre la que se va a dibujar, el centro y el radio del círculo, el color con el que se va a dibujar el círculo, el ancho de la línea del círculo (si se pone -1 quiere decir que se rellena completamente del color indicado), el tipo de línea (al igual que antes CV_AA) y el parámetro de desplazamiento (igual a 0). 

cv::circle(imagen, cv::Point(columns / 2, rows / 2), 250, cv::Scalar(255, 0, 0), 5);
cv::line: Para dibujar una línea se usa la función line. La función line necesita como parámetros la imagen sobre la que se va a dibujar, el punto de inicio y final de la línea, el color del que se va a dibujar la línea, el ancho de la línea, el tipo de línea (lo normal es que sea CV_AA, que es una línea con antialiasing) y un último parámetro que indica un desplazamiento y que siempre se pone a 0.
cv::line(imagen, cv::Point(), cv::Point(columns, rows), cv::Scalar(0, 0, 255), 2, CV_AA);
cv::rectangle: Para dibujar un rectángulo se usa la función rectangle. La función rectangle necesita como parámetros la imagen sobre la que se va a dibujar, el punto de inicio y final del rectángulo, el color con el que se va a dibujar el rectángulo, el ancho de la línea del rectángulo (si se pone -1 quiere decir que el rectángulo se rellena completamente del color indicado), el tipo de línea (al igual que antes, lo normal es CV_AA) y el parámetro de desplazamiento (igual a 0).

cv::rectangle(imagen, cv::Point(rect, rect), cv::Point(columns - rect, rows - rect), cv::Scalar(0, 255, 0));
cv::putText: Para dibujar texto se usa la función putText. La función putText necesita como parámetros la imagen sobre la que se va a dibujar, el texto que se va a dibujar, el punto de inicio del texto, el tipo de letra (por ejemplo la CV_FONT_NORMAL), el tamaño de la letra (1 es el tamaño por defecto, se puede tanto aumentar como disminuir) y el color con el que se va a dibujar el texto.
cv::putText(imagen, "IncanatoIT", cv::Point(180, 320), CV_FONT_NORMAL, 3, cv::Scalar(145, 0, 145), 2);

 

Código: Ejemplo de Formas y Figuras en OpenCv y C++

#include "stdafx.h"
#include "opencv2\opencv.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
      //Declaramos las filas y columnas que tendrá la imagen
      int rows = 600;
      int columns = 800;
      int rect = 150;

      //Implemento la ventana
      cv::namedWindow("Ventana", CV_WINDOW_AUTOSIZE);

      //Creamos una imagen fondo negro
      //Canal BGR de tipo CV_8U  (Valors de  0 a 255)
      cv::Mat imagen(rows, columns, CV_8UC3, cv::Scalar(255, 255, 255));
      //Mat imagen(rows,columns,CV_8UC3,CV_RGB2BGR(0,0,0));
      //Dibujamos ahora un círculo azul
      cv::circle(imagen, cv::Point(columns / 2, rows / 2), 250, cv::Scalar(255, 0, 0), 5);
      //Dibujamos una línea
      cv::line(imagen, cv::Point(), cv::Point(columns, rows), cv::Scalar(0, 0, 255), 2, CV_AA);
      //Dibujamos un rectángulo
      cv::rectangle(imagen, cv::Point(rect, rect), cv::Point(columns - rect, rows - rect), cv::Scalar(0, 255, 0));
      //Implementamos el texto
      cv::putText(imagen, "IncanatoIT", cv::Point(180, 320), CV_FONT_NORMAL, 3, cv::Scalar(145, 0, 145), 2);
      //Mostramos la imagen
      cv::imshow("Ventana", imagen);

      //Cerramos la ventana con cualquier tecla
      cv::waitKey(0);
      //Destruímos la ventana
      cv::destroyWindow("Ventana");

}
Saludos Imperio, un abrazo a la distancia!
Curso OpenCV y C++ con Visual Studio 2013 (3-25) - Dibujar Formas y Texto OpenCV y C++ Reviewed by Juan Carlos Arcila Díaz on 19:44 Rating: 5

No hay comentarios:

All Rights Reserved by www.IncanatoIT.com - Desarrollando Software © 2014 - 2015
Powered By Blogger, Designed by Sweetheme

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

IncanatoIt.com. Con la tecnología de Blogger.