热门标签 | 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
推荐阅读
  • 一、死锁现象与递归锁进程也是有死锁的所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • RingBuffer,或者说CircularBuffer,是一个长度固定的缓冲区,当从一端插入元素超过指定的最大长度时,缓冲区另一端的元素 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 给出一群女孩的重量和颜值和她们的朋友关系现在有一个舞台ab是朋友bc是朋友ac就是朋友给出最大承重可以邀请这些女孩来玩对于每一个朋友团体全邀请or邀请一个or不邀请问能邀请的女孩的 ... [详细]
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社区 版权所有