热门标签 | 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
推荐阅读
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • PyCharm中配置Pylint静态代码分析工具
    本文详细介绍如何在PyCharm中配置和使用Pylint,帮助开发者进行静态代码检查,确保代码符合PEP8规范,提高代码质量。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • PHP数组平均值计算方法详解
    本文详细介绍了如何在PHP中计算数组的平均值,涵盖基本概念、具体实现步骤及示例代码。通过本篇文章,您将掌握使用PHP函数array_sum()和count()来求解数组元素的平均值。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
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社区 版权所有