OpenCV con Python: instalación, lectura de imágenes y ejemplos

1. ¿Qué es OpenCV?

En el procesamiento de imágenes con Python, OpenCV (cv2) es una biblioteca sumamente importante. En esta sección explicamos qué es OpenCV, por qué conviene usarlo con Python y ofrecemos una visión general.

Resumen de OpenCV

OpenCV (Open Source Computer Vision Library) es una biblioteca para procesamiento de imágenes y visión por computadora. Originalmente fue desarrollada por Intel y hoy se mantiene como un proyecto de código abierto por una gran comunidad de desarrolladores e investigadores. OpenCV está disponible no solo para Python, sino también para C++, Java y otros lenguajes; sin embargo, la combinación con Python es especialmente popular. La razón es la sencillez de Python junto con las potentes funciones de OpenCV, una dupla ideal que utilizan tanto principiantes como usuarios avanzados.

Ventajas de OpenCV en Python

  1. Interfaz sencilla OpenCV ofrece una API simple y fácil de entender; con Python puedes realizar procesamiento de imágenes avanzado en pocas líneas. Por ejemplo, cargar, mostrar y redimensionar imágenes es muy directo.
  2. Funciones abundantes Además de cargar y mostrar imágenes, OpenCV soporta conversión de espacios de color, detección de bordes, reconocimiento de objetos, detección de rostros y muchas funciones más. Así, cubre desde tareas básicas hasta reconocimiento basado en aprendizaje automático.
  3. Amplia comunidad y soporte Dado que lo usan muchísimos desarrolladores, encontrarás documentación, tutoriales y ejemplos en Internet. Cuando surge un problema, es fácil hallar soluciones en foros y sitios de preguntas y respuestas.

¿Cómo se utiliza?

OpenCV se usa en campos muy diversos, como reconocimiento de imágenes, detección de rostros, seguimiento de movimiento y visión robótica. En particular, es útil en:
  • Sistemas de videovigilancia: reconocimiento facial y detección de comportamientos anómalos.
  • Procesamiento de imágenes médicas: análisis de tomografías (CT) y resonancias (MRI).
  • Conducción autónoma: detección de objetos y reconocimiento de carriles.
OpenCV ofrece un procesamiento rápido y estable también en proyectos reales, por lo que es ampliamente adoptado en entornos empresariales.

2. Cómo instalar OpenCV en Python

A continuación explicamos cómo instalar OpenCV en un entorno Python. Verás los pasos con pip y cómo resolver errores frecuentes.

Pasos de instalación de OpenCV

Para usar OpenCV en Python, primero debes instalar la biblioteca. El método más común es usar el gestor de paquetes de Python, pip. Ejecuta:
pip install opencv-python
Con este comando, OpenCV se instala en tu entorno de Python. También puedes instalar el paquete opencv-python-headless, que ofrece funciones de procesamiento sin dependencias de GUI; es recomendable en servidores o entornos sin interfaz gráfica.
pip install opencv-python-headless

Errores comunes y cómo solucionarlos

  1. ModuleNotFoundError: No module named 'cv2' Aparece cuando OpenCV no está instalado o el entorno de Python no está configurado correctamente. Verifica la instalación y vuelve a ejecutar el script.
  2. Problemas de dependencias Pueden surgir errores de dependencias durante la instalación. A menudo se resuelven instalando paquetes adicionales como opencv-contrib-python.
pip install opencv-contrib-python
  1. Incompatibilidad de versiones Si la versión de Python no coincide con la de OpenCV, pueden ocurrir errores. Consulta la documentación oficial para verificar compatibilidades e instala la versión adecuada.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Cómo cargar una imagen

Cargar imágenes con OpenCV es muy sencillo. Aquí usamos cv2.imread() para leer un archivo y cv2.imshow() para mostrarlo.

Cargar una imagen

Para cargar una imagen con OpenCV en Python, usa cv2.imread(). Esta función lee el archivo desde la ruta indicada y devuelve un arreglo de NumPy.
import cv2

# 画像を読み込む
image = cv2.imread('example.jpg')
Asegúrate de especificar correctamente la ruta del archivo. Usa una ruta absoluta o confirma que la imagen esté en el directorio de ejecución del script.

Mostrar una imagen

Para mostrar la imagen cargada, utiliza cv2.imshow(). El siguiente código abre una ventana y espera hasta que se presione una tecla.
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
En este ejemplo, cv2.imshow() muestra la imagen, cv2.waitKey(0) espera la entrada de una tecla y cv2.destroyAllWindows() cierra todas las ventanas abiertas. Con cv2.waitKey(0) la espera es indefinida; si quieres esperar en milisegundos, usa por ejemplo cv2.waitKey(1000).

Qué hacer si la imagen no se carga correctamente

Si la carga falla, se devuelve None. Es recomendable comprobarlo con una verificación como la siguiente:
if image is None:
    print("画像が見つかりません")
else:
    cv2.imshow('Image', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
Esto facilita el diagnóstico cuando la ruta es incorrecta, el archivo está dañado o el formato no es compatible.

4. Preprocesamiento y redimensionado de imágenes

Antes del procesamiento, es habitual ajustar el tamaño de la imagen o convertir el espacio de color. En esta sección explicamos cómo redimensionar con cv2.resize() y cómo convertir espacios de color.

Redimensionar imágenes

Para cambiar el tamaño, usa cv2.resize(). Esta función ajusta la imagen a un tamaño específico. Ejemplo:
import cv2

# 画像を読み込む
image = cv2.imread('example.jpg')

# 画像のリサイズ
resized_image = cv2.resize(image, (400, 300))

# リサイズ後の画像を表示
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Aquí, (400, 300) es el nuevo ancho y alto. Para mantener la relación de aspecto, usa los parámetros fx y fy para escalar en ancho y alto:
resized_image = cv2.resize(image, None, fx=0.5, fy=0.5)
En este ejemplo se reduce el tamaño al 50%. Con None indicas que ajustarás por factor de escala y no por tamaño fijo.

Conversión de espacio de color

Cambiar el espacio de color suele ser clave. Por ejemplo, convertir una imagen a escala de grises reduce la carga de cómputo y acelera el procesamiento. Con OpenCV, usa cv2.cvtColor():
# 画像をグレースケールに変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# グレースケール画像を表示
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Aquí especificamos cv2.COLOR_BGR2GRAY para convertir de BGR (Blue, Green, Red) a escala de grises, lo que reduce drásticamente la información y permite un procesamiento más eficiente.
年収訴求

5. Procesamiento avanzado: detección de contornos y análisis de histogramas

Para análisis detallado y detección de objetos, la detección de contornos y el análisis de histogramas son fundamentales. Aquí vemos cv2.findContours() para contornos y cv2.calcHist() para histogramas.

Detección de contornos

La detección de contornos reconoce la forma de los objetos. En OpenCV, se usa una imagen binaria. Primero convertimos a escala de grises, luego binarizamos y finalmente detectamos contornos.
# グレースケールに変換
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二値化
ret, thresh = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# 輪郭検出
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 輪郭を描画
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

# 結果を表示
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Primero convertimos a escala de grises y luego aplicamos binarización. Con la imagen binaria, cv2.findContours() detecta contornos y cv2.drawContours() los dibuja sobre la imagen.

Análisis de histogramas

El histograma visualiza la distribución de intensidades o colores en una imagen. Con OpenCV, calculas el histograma con cv2.calcHist() y lo representas con matplotlib.
import matplotlib.pyplot as plt

# ヒストグラムの計算
hist = cv2.calcHist([image], [0], None, [256], [0, 256])

# ヒストグラムをプロット
plt.plot(hist)
plt.show()
En este ejemplo calculamos el histograma del canal azul y lo graficamos con matplotlib. Con histogramas puedes evaluar brillo, contraste y distribución de intensidades.

6. Ejemplo práctico: procesamiento de imágenes en tiempo real

OpenCV no solo procesa imágenes estáticas, también permite trabajar en tiempo real con la cámara. En esta sección, usamos cv2.VideoCapture() para adquirir y procesar video en vivo. Con pequeñas variaciones, puedes aplicar filtros o detectar objetos en tiempo real.

Captura de video de la cámara

Con cv2.VideoCapture() puedes capturar video en tiempo real. El siguiente código obtiene y muestra los fotogramas:
import cv2

# カメラを起動
cap = cv2.VideoCapture(0)

# カメラ映像が取得できるか確認
if not cap.isOpened():
    print("カメラが開けません")
    exit()

while True:
    # 映像をフレームごとに読み込む
    ret, frame = cap.read()

    if not ret:
        print("フレームが取得できません")
        break

    # フレームを表示
    cv2.imshow('Camera Feed', frame)

    # 'q'キーを押したら終了
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# リソースを解放してウィンドウを閉じる
cap.release()
cv2.destroyAllWindows()

Filtrado en tiempo real

Además de mostrar el video, puedes aplicar filtros o efectos. Por ejemplo, convertir el video a escala de grises en tiempo real:
while True:
    ret, frame = cap.read()

    if not ret:
        break

    # フレームをグレースケールに変換
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # グレースケールのフレームを表示
    cv2.imshow('Grayscale Camera Feed', gray_frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
Aquí convertimos cada fotograma a escala de grises con cv2.cvtColor(), reduciendo el cómputo y facilitando el procesamiento.

7. Solución de problemas

Al usar OpenCV, es normal encontrar errores. En esta sección cubrimos incidencias frecuentes y sus soluciones.

1. OpenCV no está instalado

Error: ModuleNotFoundError: No module named 'cv2' Este error aparece cuando OpenCV no está instalado en el entorno de Python. Para resolverlo, instala OpenCV con:
pip install opencv-python
Para la versión headless (sin GUI), usa:
pip install opencv-python-headless

2. La cámara no es reconocida

Error: Si cv2.VideoCapture(0) no abre la cámara, puede que el sistema no la reconozca. Solución:
  • Verifica que la cámara esté bien conectada.
  • Asegúrate de que ninguna otra aplicación la esté usando.
  • Si hay varias cámaras, prueba cambiando el índice, por ejemplo cv2.VideoCapture(1).

3. Fallo al cargar la imagen

Error: Ocurre cuando la imagen no se encuentra o no se puede cargar correctamente. Solución:
  • Comprueba que la ruta sea correcta. Se recomienda usar rutas absolutas.
  • Verifica que el formato esté soportado. OpenCV admite JPEG y PNG; otros formatos pueden requerir bibliotecas adicionales.
image = cv2.imread('/path/to/your/image.jpg')
if image is None:
    print("画像が読み込めません")
 

8. Conclusión

OpenCV es una herramienta potente para el procesamiento de imágenes con Python. Desde la instalación y las operaciones básicas hasta el video en tiempo real, ofrece funciones amplias y fáciles de usar para todos los niveles. Con esta guía, ya conoces el flujo básico: ahora puedes avanzar hacia tareas más complejas y combinarlas con aprendizaje automático. OpenCV será una herramienta valiosa en muchos proyectos.
侍エンジニア塾