如何将ros下sensor_msgs.msg的Image转换为array

使用ros_numpy package

Tools for converting ROS messages to and from numpy arrays. Contains two functions:

arr = numpify(msg, …) - try to get a numpy object from a message msg
= msgify(MessageType, arr, …) - try and convert a numpy object to a message

安装方式:

git clone https://github.com/eric-wieser/ros_numpy.git
cd ros_numpy/
python setup.py install
python3 setup.py install

使用:

  from sensor_msgs.msg import Image
  import ros_numpy
  import PIL
  image = ros_numpy.numpify(image)        
  image = PIL.Image.fromarray(image)

其中image是class 'sensor_msgs.msg._Image.Image’类型,使用ros_numpy下的函数将其转换为np.array,就可以利用PIL.Image.fromarray进行图像处理。

PIL和numpy array的转化

import PIL
image = Image.open(“###.jpg”)   # image is a PIL image 
array = numpy.array(image)          # array is a numpy array 
image2 = Image.fromarray(array)   # image2 is a PIL image
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是修改后的代码: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import cv2 import numpy as np import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError # 定义要识别的颜色范围 colors = { 'red': ([0, 50, 50], [10, 255, 255]), 'green': ([36, 25, 25], [86, 255, 255]), 'blue': ([100, 50, 50], [130, 255, 255]) } # 初始化cv_bridge bridge = CvBridge() # 定义回调函数,处理订阅到的图像 def image_callback(msg): # 将ROS图像格式转换为OpenCV图像格式 try: cv_image = bridge.imgmsg_to_cv2(msg, 'bgr8') except CvBridgeError as e: print(e) return # 转换颜色空间 hsv = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) # 遍历所有颜色范围,进行二值化和轮廓检测 for color_name, color_range in colors.items(): lower_color = np.array(color_range[0]) upper_color = np.array(color_range[1]) mask = cv2.inRange(hsv, lower_color, upper_color) _, contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 遍历轮廓,绘制外接矩形 for contour in contours: area = cv2.contourArea(contour) if area < 100: continue x, y, w, h = cv2.boundingRect(contour) cv2.rectangle(cv_image, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示图像 cv2.imshow('frame', cv_image) cv2.waitKey(1) # 初始化节点 rospy.init_node('color_detection') # 订阅摄像头图像 image_sub = rospy.Subscriber('/usb_cam/image_raw', Image, image_callback) # 进入循环 rospy.spin() # 关闭窗口 cv2.destroyAllWindows() ``` 在上述代码中,我们定义了一个字典 `colors`,其中包含要识别的多种颜色的范围。然后我们遍历所有颜色范围,进行二值化和轮廓检测,并在原图上绘制外接矩形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值