热门标签 | 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
推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Python实现照片磨皮效果
    本文介绍如何使用Python和OpenCV库来实现照片的磨皮效果,使图片更加平滑并提升整体美感。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文介绍如何使用 Python 获取文件和图片的创建、修改及拍摄日期。通过多种方法,如 PIL 库的 _getexif() 函数和 os 模块的 getmtime() 和 stat() 方法,详细讲解了这些技术的应用场景和注意事项。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
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社区 版权所有