Академический Документы
Профессиональный Документы
Культура Документы
¿Qué es OpenCV?
En junio de 2015 se produjo un hito importante, por fin la versión 3.0 estaba
disponible. Si hechos números, en 16 años (de 1999 a 2015) solo ha habido 3
versiones. Esto es debido a que desde un principio esta biblioteca ha sido
robusta y muy eficiente.
En esta última versión cabe destacar que por fin es compatible con la última
versión de Python, la 3.0. Esto permite aprovechar todas las ventajas de la última
versión de este lenguaje.
Quizás sea la biblioteca de visión artificial más importante y más usada del
mundo. Es utilizada por universidades, empresas y gente del movimiento
Maker para dar rienda suelta a su imaginación al tratarse de un software libre.
Módulos de OpenCV:
OpenCV tiene una estructura modular. Los módulos principales de OpenCV los
listo debajo.
Core:
Highhui:
Imgproc:
Video:
objdetect:
Incluye algoritmos de detección y reconocimiento de objetos para objetos
estándar.
#include “cv.h”
#include “highgui.h”
int main(int argc,char** argv)
{
IplImage *frame;
// Crear dispositivo de captura
// El 0 quiere decir que usarás el dispositivo con índice 0
CvCapture *capture = cvCaptureFromCAM(0);
//Se necesita highgui.h
cvNamedWindow(“capture”,CV_WINDOW_AUTOSIZE);
while(1) //Bucle infinito
{
//Consulta para el marco de la cámara
frame = cvQueryFrame(capture);
//Mostrar la imagen capturada
cvShowImage(“capture”,frame);
char ch = cvWaitKey(25); //Esperar 25 ms para presionar la tecla
if(ch==27) break; //Tecla Escape pulsada
}
//Liberar la memoria ocupada por las imágenes
cvReleaseImage(&frame);
cvDestroyWindow(“capture”);
return 0;
}
¿por qué Python?, este lenguaje es muy sencillo de usar, favoreciendo el código
legible gracias a su sintaxis sencilla.
Lo primero que debemos saber antes de empezar con los pasos a seguir para
instalar OpenCV y Python, es que esto ya no es una tecnología plug and play.
Estamos acostumbrados a hablar de Processing, Arduino, Scratch y las
tecnologías fáciles de usar. Con OpenCV la cosa se complica, sobre todo a la
hora de preparar el sistema. La instalación consta de 3 pasos.
Quizás este paso pudiera ser el más complicado, pero gracias al gestor de
paquetes Pip se hace muy sencillo. Solo debemos de descargar la versión para
nuestro sistema operativo en formato whl y luego instalarlo. Es muy simple
gracias al gestor de paquetes.
Y estos serían los 3 pasos recomendados para configurar el sistema. Puedes ver
cómo instalar OpenCV paso a paso con imágenes y el código necesario para
que todo funcione correctamente.
Para instalar Python y todos los paquetes que necesita OpenCV lo puedes hacer
de diferentes maneras. La primera sería ir uno por uno descargando e instalando.
Es un buen ejercicio, pero puede llevarnos mucho tiempo y darnos muchos
dolores de cabeza.
Sin embargo, existe otro método bastante más sencillo, utilizando Anaconda. Se
trata de una distribución de Python destinado a procesamiento de datos masivos,
análisis predictivo y programación científica que simplifica la gestión de
paquetes.
1 python -V
Nos hará falta más adelante para instalar OpenCV. Para comprobar que está todo
correctamente instalado abre una línea de comandos y ejecuta lo siguiente
1 pip -V
Si quieres comprobar si existe una versión nueva del gestor de paquetes Pip, ejecuta el
siguiente comando
OpenCV es una librería para visión artificial de código abierto y que está
disponible para muchos lenguajes de programación. Entre ellos se encuentra
Python. Desde la última versión, OpenCV 3, esta librería permite trabajar con
Python 3.
Esto aporta varias ventajas, pero sobre todo, nos permite utilizar las últimas
funcionalidades del lenguaje Python.
Accede a esta web y descarga los binarios que están en el archivo con extensión
.whl. Cuando abres la página aparecen diferentes archivos y tendrás que elegir
el más adecuado para tu sistema.
Según van surgiendo nuevas versiones de OpenCV y Python, estos archivos se
van actualizando. El mismo día que escribo este artículo la última versión de
OpenCV es la 3.2 y de Python es la 3.6.
Sustituye la ruta entre comillas por la ruta donde hayas descargado el archivo.
Una vez que lo tengas escrito pulsa enter. Te deberá aparecer un mensaje como
el de la siguiente imagen donde informa que se ha instalado correctamente
OpenCV 3.2.0+contrib
#3 Probando la instalación de OpenCV
Instalar OpenCV puede ser una tarea bastante compleja pero como has podido
comprobar, en unos sencillos pasos ya lo tenemos todo preparado. Para
asegurarnos de que todo está correctamente instalado vamos a crear un
pequeño programa.
import cv2
imagen =
cv2.imread("logo.jpg")
cv2.imshow("prueba", imagen)
cv2.waitKey(0)
Guarda el archivo con el nombre prueba-opencv.py. Ahora descarga la siguiente
imagen y la guardas en la misma carpeta donde has guardado el archivo anterior.
Abre una línea de comandos y vas a la carpeta donde tienes el archivo prueba-
opencv.py y la imagen. Ejecuta el siguiente comando
python prueba-opencv.py
Si todo ha ido bien te aparecerá la imagen en una ventana. Esto indica que
OpenCV se ha instalado correctamente.
Y con esto ya habríamos terminado de instalar OpenCV con Python en nuestro
Windows. Ahora vamos a ver cómo instalar un paquete para Sublime Text que
nos permite programar con Python y OpenCV.
Sublime Text es uno de mis IDEs favoritos. Lo utilizo para programar webs,
Python e incluso se puede utilizar para programar Arduino. Si quieres utilizarlo
para programar con OpenCV necesitarás tener instalado el paquete Python
Anaconda.
Este IDE tiene un gestor de paquete parecido al que hemos visto con Anaconda,
Pip. Por defecto no viene instalado así que tendrás que instalarlo manualmente.
Por último, vamos a instalar el paquete Python Anaconda a través del gestor de
paquetes. Accede al menú Preferences/Package Control. Se abrirá un nuevo
menú. Busca Package Control: Install Package y lo seleccionas.
Ahora bien, que ya tenemos todo preparado para empezar a usar la visión
artificial en nuestro pc podemos empezar explicando el código
Numpy
Arrays
Una matriz numpy es una cuadrícula de valores, todos del mismo tipo, y está
indexada por una tupla de enteros no negativos. El número de dimensiones es
el rango de la matriz; la forma de una matriz es una tupla de enteros que da el
tamaño de la matriz a lo largo de cada dimensión.
import numpy as np
Indexación de matrices
Rebanado: Al igual que en las listas de Python, los arreglos numpy se pueden
rebanar. Dado que las matrices pueden ser multidimensionales, debe especificar
un sector para cada dimensión de la matriz:
import numpy as np
import numpy as np
# When using integer array indexing, you can reuse the same
# element from the source array:
print(a[[0, 0], [1, 1]]) # Prints "[2 2]"
import numpy as np
import numpy as np
Matemática
import numpy as np
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
para calcular los productos internos de los vectores, para multiplicar un vector
por una matriz y para multiplicar las matrices. dot está disponible como una
import numpy as np
x = np.array([[1,2],[3,4]])
y = np.array([[5,6],[7,8]])
v = np.array([9,10])
w = np.array([11, 12])
import numpy as np
x = np.array([[1,2],[3,4]])
de matriz:
import numpy as np
x = np.array([[1,2], [3,4]])
print(x) # Prints "[[1 2]
# [3 4]]"
print(x.T) # Prints "[[1 3]
# [2 4]]"
Numpy proporciona muchas más funciones para manipular matrices; Puedes ver
la lista completa en la documentación .
Radiodifusión
Por ejemplo, supongamos que queremos agregar un vector constante a cada fila
de una matriz. Podríamos hacerlo así:
import numpy as np
Esto funciona; sin embargo, cuando la matriz xes muy grande, el cálculo de un
bucle explícito en Python podría ser lento. Tenga en cuenta que agregar el
vector va cada fila de la matriz xequivale a formar una matriz vval apilar varias
copias de forma vvertical, luego realizar la suma elemental de xy vv. Podríamos
implementar este enfoque de esta manera:
import numpy as np
La transmisión de Numpy nos permite realizar este cálculo sin crear copias
múltiples de v. Considere esta versión, utilizando la difusión:
import numpy as np
La línea y = x + vfunciona aunque xtiene forma (4, 3)y vtiene forma (3,)debido a
la difusión; esta línea funciona como si vrealmente tuviera forma (4, 3), donde
cada fila era una copia de v, y la suma se realizó elementwise.
Se dice que las dos matrices son compatibles en una dimensión si tienen el mismo
tamaño en la dimensión, o si una de las matrices tiene el tamaño 1 en esa
dimensión.
Después de la difusión, cada matriz se comporta como si tuviera una forma igual
al máximo elemental de las dos matrices de entrada.
En cualquier dimensión donde una matriz tenía un tamaño 1 y la otra matriz tenía
un tamaño mayor que 1, la primera matriz se comporta como si se hubiera
copiado a lo largo de esa dimensión
Si esta explicación no tiene sentido, intente leer la explicación de la
documentación o esta explicación .
import numpy as np
La difusión generalmente hace que su código sea más conciso y rápido, por lo
que debe esforzarse por usarlo cuando sea posible.
Ciencia
Operaciones de imagen
SciPy proporciona algunas funciones básicas para trabajar con imágenes. Por
ejemplo, tiene funciones para leer imágenes del disco en matrices numpy, para
escribir matrices numpy en el disco como imágenes y para redimensionar
imágenes. Aquí hay un ejemplo simple que muestra estas funciones:
Archivos MATLAB
SciPy define algunas funciones útiles para calcular distancias entre conjuntos de
puntos.
La función scipy.spatial.distance.pdist calcula la distancia entre todos los pares
import numpy as np
from scipy.spatial.distance import pdist, squareform
Una función similar ( scipy.spatial.distance.cdist) calcula la distancia entre todos los pares a
través de dos conjuntos de puntos; Puedes leerlo en la documentación .
Matplotlib
Matplotlib es una biblioteca de trazado. En esta sección, proporcione una breve introducción
al matplotlib.pyplotmódulo, que proporciona un sistema de trazado similar al de MATLAB.
Trazar
La función más importante en matplotlib es plot, que le permite trazar datos 2D. Aquí hay un
ejemplo simple:
import numpy as np
import matplotlib.pyplot as plt
Con solo un poco de trabajo adicional, podemos trazar fácilmente varias líneas
a la vez, y agregar un título, leyenda y etiquetas de eje:
import numpy as np
import matplotlib.pyplot as plt
Subparcelas
import numpy as np
import matplotlib.pyplot as plt
# Set the second subplot as active, and make the second plot.
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
Imágenes
Puede utilizar la imshow función para mostrar imágenes. Aquí hay un ejemplo:
import numpy as np
from scipy.misc import imread, imresize
import matplotlib.pyplot as plt
img = imread('assets/cat.jpg')
img_tinted = img * [1, 0.95, 0.9]
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
if ret:
cv2.imshow('video', frame)