ros中利用python 订阅usb_cam图像数据,并利用cv_bridge转换成opencv格式,供后面目标检测使用

写在前面:

系统:ubuntu18.04 LST
ros 版本:melodic
自行安装usb_cam
依赖:

sensor_msgs
opencv2
cv_bridge
rospy
std_msgs
代码

读取usb_cam摄像头图像,画个圆圈,再发布出去。

#!/usr/bin/env python
from __future__ import print_function

# import roslib
# roslib.load_manifest('my_package')
import sys
import rospy
import cv2
from std_msgs.msg import String
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError

class image_converter:

  def __init__(self):
    self.image_pub = rospy.Publisher("image_topic_2",Image)

    self.bridge = CvBridge()
    self.image_sub = rospy.Subscriber("/usb_cam/image_raw",Image,self.callback)

  def callback(self,data):
    try:
      cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")
    except CvBridgeError as e:
      print(e)

    (rows,cols,channels) = cv_image.shape
    if cols > 60 and rows > 60 :
      cv2.circle(cv_image, (50,50), 10, 255)

    cv2.imshow("Image window", cv_image)
    cv2.waitKey(3)

    try:
      self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))
    except CvBridgeError as e:
      print(e)

def main(args):
  ic = image_converter()
  rospy.init_node('image_converter', anonymous=True)
  try:
    rospy.spin()
  except KeyboardInterrupt:
    print("Shutting down")
  cv2.destroyAllWindows()

if __name__ == '__main__':
    main(sys.argv)

相关链接:
Converting between ROS images and OpenCV images (Python)
Ros利用usb_cam进行opencv测试

好的,订阅ROS摄像头图像并处理可以分为以下几个步骤: 1. 安装ROS和相应摄像头驱动 在开始之前,需要确保ROS已经正确安装,同时需要安装相应的摄像头驱动。以ROS Kinetic和USB摄像头为例,可以使用以下命令安装: ``` sudo apt-get install ros-kinetic-usb-cam ``` 2. 创建ROS包和节点 使用ROS,我们需要创建ROS包和节点来管理我们的程序。可以使用以下命令创建一个名为“camera_processing”的ROS包: ``` catkin_create_pkg camera_processing rospy cv_bridge sensor_msgs ``` 然后可以使用以下命令创建一个名为“image_processor”的ROS节点: ``` rosrun camera_processing image_processor.py ``` 3. 编写代码 在创建了ROS包和节点之后,可以开始编写Python代码来订阅摄像头图像并进行处理。以下是一个基本的代码框架: ```python #!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 def image_callback(msg): # 将ROS图像消息转换为OpenCV图像格式 bridge = CvBridge() cv_image = bridge.imgmsg_to_cv2(msg, "bgr8") # 进行图像处理 # ... # 显示图像 cv2.imshow("Image window", cv_image) cv2.waitKey(3) def main(): rospy.init_node('image_processor') rospy.Subscriber('/usb_cam/image_raw', Image, image_callback) rospy.spin() if __name__ == '__main__': main() ``` 在上面的代码,我们首先导入必要的ROSOpenCV库,然后定义了一个名为“image_callback”的回调函数,用于处理接收到的摄像头图像消息。在回调函数,我们首先将ROS图像消息转换为OpenCV图像格式,然后进行图像处理,最后显示图像。 在main函数,我们初始化了ROS节点,然后使用rospy.Subscriber函数订阅了名为“/usb_cam/image_raw”的摄像头图像话题,当有新的图像消息到达时,就会调用我们定义的回调函数进行处理。 4. 运行代码 最后,使用以下命令在终端运行ROS节点: ``` rosrun camera_processing image_processor.py ``` 如果一切正常,你应该能够看到摄像头的实时图像,并且你的代码可以对图像进行处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值