热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ROS发布和订阅图片

发布和订阅image

发布和订阅 image

  • 打开摄像头
  • 发布图片
  • 订阅图片
  • cv_bridge
打开摄像头

cap = cv2.VideoCapture("/dev/video0")
cap.set(3, 640)#weight
cap.set(4, 480)#height
ret, frame = cap.read()
# frame = cv2.flip(frame, 0) ##图像上下颠倒
发布图片

image_pub = rospy.Publisher('/image', Image,queue_size=10)#发布话题

image_pub.publish(bridge.cv2_to_imgmsg(frame, "bgr8"))
订阅图片

rospy.Subscriber("/image", Image,image_callback,queue_size = 10)

  • 回调函数,将订阅的图片保存

def image_callback(image_data):
global bridge,count
#timestr = "%.6f" % image_data.header.stamp.to_sec()
frame = bridge.imgmsg_to_cv2(image_data, "bgr8")
image_name = str(count) + ".jpg" # 图像命名:时间戳.jpg
cv2.imwrite(image_path + image_name, frame) # 保存;
print("图片保存成功:",image_name)
rospy.Rate(20).sleep()
count+=1
cv_bridge

  • 这里发布和订阅图片都用到python3的cv_bridge进行图片类型转换
  • 由于Ubuntu16.04和Ubuntu18.04 python默认版本为python2,所以使用python2的cv_bridge会报错
  • 需要下载vision_opencv,并编译,就可以使用下图的cv_bridge,具体教程参考博客
  • 可以下载我分别在Ubuntu16.04和Ubuntu18.04编译生成的cv_bridge

sys.path.remove("/opt/ros/kinetic/lib/python2.7/dist-packages")
sys.path.append("/home/bo/catkin_ws/src/racecar/racecar_gazebo/scripts/")
from cv_bridge import CvBridge, CvBridgeError

在这里插入图片描述

#!/usr/bin/python2
# -*- coding: utf-8 -*-
import time
import rospy
import sys
import cv2
import numpy as np
import math
from sensor_msgs.msg import Image
sys.path.remove("/opt/ros/kinetic/lib/python2.7/dist-packages")
sys.path.append("/home/bo/catkin_ws/src/racecar/racecar_gazebo/scripts/")
from cv_bridge import CvBridge, CvBridgeError
image_path = '/home/bo/data/'
count=0
def image_callback(image_data):
global bridge,count
#timestr = "%.6f" % image_data.header.stamp.to_sec()
frame = bridge.imgmsg_to_cv2(image_data, "bgr8")
image_name = str(count) + ".jpg" # 图像命名:时间戳.jpg
cv2.imwrite(image_path + image_name, frame) # 保存;
print("图片保存成功:",image_name)
rospy.Rate(20).sleep()
count+=1
def main():
try:
while not rospy.is_shutdown():
ret, frame = cap.read()
# frame = cv2.flip(frame, 0) ##图像上下颠倒
image_pub.publish(bridge.cv2_to_imgmsg(frame, "bgr8"))
cv2.imshow('frame', frame)
cv2.waitKey(3)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()
except rospy.ROSInterruptException:
pass
if __name__ == '__main__':
try:
rospy.init_node('Server_Socket', anonymous=True) # 初始化节点
global bridge,cap,image_pub
bridge = CvBridge()
cap = cv2.VideoCapture("/dev/video0")
cap.set(3, 640)#weight
cap.set(4, 480)#height
image_pub = rospy.Publisher('/image', Image,queue_size=10)#发布话题
rospy.Subscriber("/image", Image,image_callback,queue_size = 10)#(订阅的话题名称,数据类型,回调函数(一直监听话题是否传来消息),队列长度)
main()
rospy.spin()
except rospy.ROSInterruptException:
pass


版权声明:本文为gezongbo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/gezongbo/article/details/122706911
推荐阅读
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • andr ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • C# LiNQ 查询 join连接
    C# LiNQ 查询 join连接 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 深入解析RDMA中的队列对(Queue Pair)
    本文将详细探讨RDMA架构中的关键组件——队列对(Queue Pair,简称QP),包括其基本概念、硬件与软件实现、QPC的作用、QPN的分配机制以及用户接口和状态机。通过这些内容,读者可以更全面地理解QP在RDMA通信中的重要性和工作原理。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • LeetCode 347. 高频元素前 K 名
    本题旨在从给定数组中找出出现频率最高的前 K 个元素。难度等级为中等,使用优先队列(大顶堆)作为主要数据结构进行求解。 ... [详细]
author-avatar
个信2502894627
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有