Saltar al contenido

08: Integración de OpenCV con ROS

tortuga opencv ROS

La integración de OpenCV con ROS (Robot Operating System) permite el desarrollo de sistemas de visión artificial avanzados para robots. ROS es un sistema operativo para robots que proporciona una estructura para el desarrollo de aplicaciones robóticas, mientras que OpenCV proporciona una gran cantidad de funciones y herramientas para el procesamiento de imágenes y vídeo.

Una de las formas más comunes de integrar OpenCV con ROS es mediante la publicación y suscripción de imágenes en los tópicos de ROS. Por ejemplo, si queremos publicar una imagen procesada por OpenCV en un tópico de ROS, podemos utilizar el siguiente código:

Subscríbete a nuestro blog

import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
# Inicializar el nodo de ROS
rospy.init_node("opencv_example")
# Crear un objeto para convertir entre imágenes de OpenCV y ROS
bridge = CvBridge()
# Crear un objeto para publicar imágenes en el tópico "image_topic"
image_pub = rospy.Publisher("image_topic", Image, queue_size=1)
# Iniciar el bucle de captura de imágenes
while not rospy.is_shutdown():
    # Capturar una imagen desde la webcam
    cap = cv2.VideoCapture(0)
    ret, frame = cap.read()
    cap.release()
    # Procesar la imagen con OpenCV
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Convertir la imagen a formato ROS y publicarla en el tópico
    ros_image = bridge.cv2_to_imgmsg(gray, "mono8")
    image_pub.publish(ros_image)

Por otro lado, si queremos suscribirnos a un tópico de ROS para obtener imágenes y procesarlas con OpenCV, podemos utilizar el siguiente código:

import cv2
import numpy as np
# Cargar el modelo pre-entrenado de YOLO
net = cv2.dnn.readNetFromDarknet("yolov3.cfg", "yolov3.weights")
# Definir las capas de salida del modelo
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]
# Cargar la imagen
img = cv2.imread("image.jpg")
(H, W) = img.shape[:2]
# Crear un blob a partir de la imagen
blob = cv2.dnn.blobFromImage(img, 1 / 255.0, (416, 16), swapRB=True, crop=False)
# Enviar el blob a la red neuronal
net.setInput(blob)
layerOutputs = net.forward(ln)
# Inicializar las listas para almacenar las detecciones y las probabilidades
boxes = []
confidences = []
# Recorrer las salidas de la capa
for output in layerOutputs:
    # Recorrer las detecciones
    for detection in output:
        # Extraer las probabilidades y las coordenadas de las cajas delimitadoras
        scores = detection[5:]
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
# Inicializar el nodo de ROS
rospy.init_node("opencv_example")
# Crear un objeto para convertir entre imágenes de OpenCV y ROS
bridge = CvBridge()
# Función de callback para el tópico "image_topic"
def image_callback(data):
    # Convertir la imagen a formato OpenCV
    cv_image = bridge.imgmsg_to_cv2(data, "bgr8")
    # Procesar la imagen con OpenCV
    gray = cv2.cvtColor(cv_image,cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# Mostrar la imagen procesada con OpenCV
cv2.imshow("Imagen Procesada", edges)
cv2.waitKey(1)
#Crear objeto para subscribirse al topico /image_topic
image_sub = rospy.Subscriber("image_topic", Image, image_callback)
#Mantener el bucle ROS ejecutandose
rospy.spin()

En este ejemplo, se suscribe a un tópico de ROS llamado «image_topic» y se utiliza una función de callback para procesar las imágenes recibidas con OpenCV. El procesamiento en este caso es la conversión a escala de grises y un filtro de suavizado gaussiano y bordes con Canny. Finalmente se muestra la imagen procesada mediante cv2.imshow.

En resumen, la integración de OpenCV con ROS permite el desarrollo de sistemas de visión artificial avanzados para robots. Publicar y suscribir imágenes en tópicos de ROS es una forma común de integrar OpenCV con ROS. Es importante tener un conocimiento previo de la programación en Python y ROS para poder realizar la integración correctamente.

Aviso Legal

Política de cookies

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

08:Tutorial visión artificial con OpenCV y Python: Integración de OpenCV con ROS: publicación y suscripción de imágenes

  • por