Entradas

Mostrando las entradas etiquetadas como OpenCV

OpenCV lector de códigos QR

Imagen
A partir de la versión 4.0.0 de OpenCV se agregó la funcionalidad de poder detectar y decodificar códigos QR sin necesidad de librerías externas, sin embargo la misma no realizaba el trabajo de la mejor manera, en la reciente versión 4.1.2 se agregaron mejoras que probaremos en día de hoy, veremos como usar OpenCV para crear un detector y decodificador de códigos QR en tiempo real con unas pocas líneas de código C++. La clase encargada de realizar la respectiva tarea es QRCodeDetector , usando sus métodos detect(...) podremos detectar un código QR en una imagen en colores o a escala de grises, con decode(...) decodificamos el código y obtenemos la información que contenga el mismo, para nuestro ejemplo una URL, también podremos usar detectAndDecode(...) para hacer ambas tareas en una sola llamada. int main ( int argc , char * argv [ ] ) { // Init QR Detector QRCodeDetector qr = QRCodeDetector :: QRCodeDetector ( ) ; VideoCapture capture ; if ( capture . open ( ...

Clasificación de género y detección de rostros

Imagen
Seguimos probando lo que podemos hacer con el módulo DNN de OpenCV versión 4.0, esta vez vamos a crear una simple aplicación la cual captura video de la webcam, detecta un rostro e intenta predecir si el mismo pertenece a una cara masculina o femenina.

Medir tiempo de ejecución y FPS

Imagen
En ocaciones necesitamos conocer el tiempo que le toma a una función realizar su trabajo, para ello utilizaremos las funciones proporcionadas por OpenCV, estas son cv::getTickFrequency() y cv::getTickCount() , mas adelante veremos que hace cada una de ellas y como podemos usarlas para calcular los FPS cuando hacemos una aplicacion que funcione en tiempo real.

Conectar OpenCV a cámara IP

Imagen
Creamos este corto tutorial para que podamos aprender a conectar una aplicación OpenCV a una cámara IP, decir que es bastante sencillo y no hay que hacer mas que colocar la dirección IP a la que nos deseamos conectar, el resto es exactamente igual a como lo hariamos para trabajar con un video en local.

Cargar modelos Tensorflow en OpenCV DNN

Imagen
DNN es un módulo desarrollado para trabajar con redes neuronales profundas, anteriormente este debía se instalado desde opencv_contrib pero a partir de la versión 3.3 ya forma parte oficial de OpenCV por lo que no se requieren dependencias externas.

Detección de objetos planos

Imagen
Seguimos aplicando los conocimientos adquiridos en tutoriales anteriores , esta vez aprenderemos a detectar un objeto plano conocido que se encuentre dentro de una imagen, para hacer esto requerimos extraer los puntos característicos de la imagen de referencia (el objeto que deseamos localizar) para luego ubicar estos puntos en la imagen de destino, luego usando homografía podemos obtener la posición de dicho objeto.

Combinar imágenes con OpenCV

Imagen
Dedicaremos este tutorial a tratar de aplicar los conocimientos adquiridos en la publicación anterior, detección y descripción de puntos característicos , lo que intentaremos hacer es combinar dos imágenes que tengan una porción en común, para ello localizaremos los keypoints de ambas y haremos el pareo para luego transformar la segunda imagen de modo que se combine con la primera haciendo coincidir los keypoints .

Extracción de puntos característicos (keypoint)

Imagen
Los puntos característicos de una imagen, también llamados keypoints en inglés, son aquellas puntos que son fácilmente diferenciables en una imagen, para extraer dichos puntos OpenCV cuenta con diversas clases que implementan los algoritmos más conocidos que han sido desarrollados para este propósito, los mismos se encentran en el módulo cv::features2d algunas de ellas son AKAZE, BRISK, ORB, etc., otros algoritmos que requieren licencia los puedes encontrar en el módulo opencv_contrib , más específicamente cv::xfeatures2d podemos usar SURF, FREAK, SIFT, entre otros.

OpenCV4Android Detección de Objetos

Imagen
Luego de haber creado nuestra primera aplicación Android OpenCV vamos a introducir conceptos un poco más avanzados y funcionales, en este tutorial aprenderemos a usar los clasificadores en cascada XML para detectar un objeto de nuestro interés, en este caso utilizaremos uno los clasificadores pre-entrenados que se incluyen en el SDK pero puedes entrenar tu propio clasificador que que detecte cualquier objeto que desees.

Programación OpenCV para Android Introducción

Imagen
Esta vez veremos el proceso requerido para desarrollar una App para el sistema Android utilizando la biblioteca OpenCV, aprenderemos como configurar nuestro entorno de programación y crearemos nuestra primera aplicación la cual nos permitirá capturar video accediendo a la cámara del dispositivo, dicho video será procesado en tiempo real para mostrar el detector de bordes Canny.

Compilar el SDK OpenCV para Android

Imagen
Dedicaremos este tutorial a conocer el proceso necesario para compilar la librería OpenCV para Android, al terminar obtendremos el OpenCV4Android SDK requerido para desarrollar aplicaciones de Visión por Computador destinadas a ser utilizadas en dispositivos móviles con sistema operativo Android, con este SDK podremos crear aplicaciones de reconocimiento de objetos, caras, etc., realidad aumentada, aprendizaje automático y otros.

Obtener esqueleto de imagen binaria

Imagen
Se le llama esqueleto de una imagen a un conjunto de curvas centradas que surge de reducir la forma original. El cálculo del esqueleto es una herramienta de análisis no escalar de formas, que conserva las propiedades topológicas de la forma original así como las propiedades geométricas, según el método utilizado. El esqueleto también es conocido como eje medio y tiene diversas aplicaciones, por ejemplo: reconocimiento de letras, números o símbolos, identificación de huellas dactilares, y muchas otras.

OpenCV Uso de las funciones Split y Merge

Imagen
La librería OpenCV cuenta con un par de funciones muy útiles que nos servirán de mucho a la hora de crear aplicaciones que requieran aplicar técnicas de visión por computador, hablamos de las funciones cv::split() y cv::merge() , la primera nos ayudará a dividir y obtener los distintos canales que componen una imagen y la segunda nos permite unirlos nuevamente.

Intercambio de caras

Imagen
Seguimos estudiando las posibilidades que nos brindan el uso de las bibliotecas Dlib y OpenCV, en esta ocasión vamos a construir una aplicación que nos permitirá intercambiar los rostros de dos personas, aprenderemos a utilizar las funciones cv::convexHull(...) y la clase Subdiv2D , aplicaremos máscaras y utilizaremos la ya conocida función cv::seamelessClone(...) .

Estimar postura 3D

Imagen
En el tutorial anterior aprendimos a extraer los landmarks de un rosto , ahora utilizaremos esa información para intentar estimar los distintos ángulos de rotación que determinan la pose de la cabeza, con esto podremos saber, por ejemplo, la dirección en la que esta mirando una persona, con esto podríamos construir una aplicación que monitoreé a un conductor y le envié una alerta cuando este quite su mirada de la carretera.

Face Landmarks Detector con Dlib y OpenCV

Imagen
Dlib en una biblioteca multipropósito que puede ser usada desde C++ y Python, contiene muchos algoritmos de aprendizaje de máquinas, compresión, análisis de imágenes, entre otras, esta librería es de código abierto y debemos compilarla para poder utilizarla, para nuestro tutorial utilizaremos OpenCV para la detección de rostros y Dlib para la obtención de las partes relevantes de la cara, ojos, boca, nariz, etc., cada una de estas partes definida por un conjunto de puntos preestablecidos.

FloodFill OpenCV

Imagen
El algoritmo floodfill es usado en muchos programas de edición de imágenes, como: Paint, GIMP, etc., para cambiar el color de relleno de una figura, en OpenCV disponemos de la función cv::floodFill() que implementa dicho algoritmo, podemos usarlo para rellenar una figura con un determinado color, o para seleccionar una área que cumpla con el rango de colores establecido.

Detección de líneas y círculos usando la transformada de Hough con OpenCV

Imagen
La Transformada de Hough , técnica propuesta y patentada por Paul Hough en 1962 es comúnmente usada en aplicaciones de visión por computador para detectar formas geométricas como círculos o líneas, OpenCV implementa esta técnica a través de dos funciones: cv::HoughCircles() y cv::HoughLines() , en el presente tutorial veremos como podemos utilizar ambas funciones para detectar las respectivas formas. Detección de Líneas Para poder detectar líneas tenemos dos implementaciones, cv2.HoughLines() y cv2.HoughLinesP() , antes de aplicar cualquiera de ellas, convertiremos la imagen a escala de grises y detectaremos los bordes, para lo que utilizaremos la función cv2.Canny() , veamos un ejemplo sencillo en Python 3.x. import cv2 import numpy as np img = cv2 . imread( 'sudoku.png' ) gray = cv2 . cvtColor(img, cv2 . COLOR_BGR2GRAY) edges = cv2 . Canny(gray, 50 , 150 , apertureSize = 3 ) lines = cv2 . HoughLines(edges, 1 , np . pi /180 , 200 ) for line in line...

Detección de contornos con OpenCV Python

Imagen
Un contorno es un conjunto de puntos que conectados unos con otros de manera consecutiva forman una figura que rodea un objeto determinado, la detección de contornos en OpenCV se aplica sobre imágenes binarias, la figura obtenida puede ser analizada posteriormente para determinar cuál es el objeto que hemos detectado, para obtener los contornos utilizaremos la función findContours() , mientras que drawContours() nos ayudará a dibujarlos.

Acceso a la webcam con OpenCV

Imagen
Usando la biblioteca OpenCV podemos acceder a la cámara web o cualquier otro dispositivo de captura que tengamos instalado en nuestro sistema, cada una de las imágenes capturadas podrán almacenarse para su análisis o procesamiento en tiempo real si así lo deseamos, tenemos disponible una clase que nos servirá para guardar los videos previamente capturados y procesados, el formato de almacenamiento depende de las características habilitadas, pero puede ser MP4, AVI, WMV, etc., y otros si tenemos los códec. Webcam desde OpenCV Para acceder a la webcam lo hacemos de manera parecida a como mostramos un video solo que en lugar de especificar un archivo de video a la clase VideoCapture indicaremos el número de dispositivo o índice de cámara que deseamos usar, cero si tenemos solo una cámara. Código C++ #include <opencv2\opencv.hpp> using namespace cv; int main () { VideoCapture cap( 0 ); if ( ! cap.isOpened()) return -1 ; namedWindow( "we...

Temas relacionados