文章目录

  • 软硬件环境
    • 硬件
    • 软件
  • Opencv和ROS
  • 发布摄像头数据节点
  • 图像接收和处理节点

软硬件环境

硬件

  • 下位机:树莓派4B(4G)
  • 上位机:PC
  • USB摄像头

软件

  • 上下位机都是Ubuntu 18.04系统
  • ROS melodic

Opencv和ROS

OpenCV格式图片(或视频帧)和ROS数据格式图片(或视频帧)之间的转换。或者直白点书,通过ROS发送图片(Image)数据类型的消息(message)。

我们只需要定义以下数据,即可发布图像数据。

发布摄像头数据节点

#!/usr/bin/env python
# coding:utf-8import cv2
import numpy as np
import rospy
from std_msgs.msg import Header
from sensor_msgs.msg import Image
from cv_bridge import CvBridge , CvBridgeError
import timeif __name__=="__main__":capture = cv2.VideoCapture(0) # 定义摄像头rospy.init_node('camera_node', anonymous=True) #定义节点image_pub=rospy.Publisher('/image_view/image_raw', Image, queue_size = 1) #定义话题while not rospy.is_shutdown():    # Ctrl C正常退出,如果异常退出会报错device busy!start = time.time()ret, frame = capture.read()if ret: # 如果有画面再执行# frame = cv2.flip(frame,0)   #垂直镜像操作frame = cv2.flip(frame,1)   #水平镜像操作   ros_frame = Image()header = Header(stamp = rospy.Time.now())header.frame_id = "Camera"ros_frame.header=headerros_frame.width = 640ros_frame.height = 480ros_frame.encoding = "bgr8"ros_frame.step = 1920ros_frame.data = np.array(frame).tostring() #图片格式转换image_pub.publish(ros_frame) #发布消息end = time.time()  print("cost time:", end-start ) # 看一下每一帧的执行时间,从而确定合适的raterate = rospy.Rate(25) # 10hz capture.release()cv2.destroyAllWindows() print("quit successfully!")

图像接收和处理节点

我在这里只写了简单的接收图像并显示代码,可以在基本代码的基础上进行扩写即可。

#!/usr/bin/env python
# coding:utf-8import rospy
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import cv2def callback(data):global bridgecv_img = bridge.imgmsg_to_cv2(data, "bgr8")cv2.imshow("frame" , cv_img)cv2.waitKey(1)if __name__ == '__main__':rospy.init_node('img_process_node', anonymous=True)bridge = CvBridge()rospy.Subscriber('/image_view/image_raw', Image, callback)rospy.spin()

效果展示:

参考文章:

  • ROS操作系统 opencv-python读取摄像头+rviz可视化
  • ROS系统中订阅者和发布者之间的延迟很大

ROS——发布摄像头节点并编写opencv图像处理节点(python)相关推荐

  1. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  2. 在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

    在pycharm中学习opencv图像处理 安装python 下载python安装包 开始安装 安装pycharm社区版 下载pycharm安装包 开始安装 启动pycharm创建第一个项目 创建第一 ...

  3. 【从零开始的ROS四轴机械臂控制】(四)- ros、gazebo与opencv,图像处理节点

    [从零开始的ROS四轴机械臂控制(四)] 七.图像处理节点 1.节点功能与实现方法 2.iamge_process 相关程序 部分程序解释 3.节点运行与测试 七.图像处理节点 1.节点功能与实现方法 ...

  4. ROS+openCV图像处理方法及案例

    本文内容环境Ubuntu20.04. 首先,我们需要安装openCV. sudo apt-get install ros-noetic-vision-opencv libopencv-dev pyth ...

  5. opencv 读取相机图像+ros发布图像

    #!/usr/bin/python2 # coding=utf-8import cv2 import numpy as np from std_msgs.msg import Header from ...

  6. ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点(python版本)

    ROS 创建msg和srv 编写发布者和订阅者节点 编写服务端和客户端节点-python版本 rosed msg和srv 创建msg 使用rosmsg 创建srv 使用rossrv 重新make一下软 ...

  7. ros发布节点信息python_ROS入门笔记(一): ROS简介

    1 ROS是什么? 机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便.功能强大,特别适用于机器人这种多节点多任务的复杂场景. 说明:R ...

  8. ROS入门-ROS的安装及编写简单的节点talker和listener

    废话不多说,我们开始吧!!! 我使用的Ubuntu 18.04的系统,所以安装的是最新的ROS版本. 以下是ROS版本和Ubuntu系统版本的对照. 安装ROS 1 配置Ubuntu软件库 先配置Ub ...

  9. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package). 一.创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次性创 ...

  10. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

最新文章

  1. 【FE前端学习】第二阶段任务-基础
  2. 电脑安全注意事项_别墅装修设计注意事项 别墅装修的陷阱有哪些
  3. 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告
  4. JAVA子类和父类在同一个包中,子类和父类在同一个包中继承性
  5. 客制化键盘编程_客制化键盘劝退指南
  6. 7-4 银行排队问题之单队列多窗口加VIP服务 (30 分)
  7. Oracle RAC更改VIP IP地址_2节点的实验
  8. php 日期时间运算的小结(计算当前时间之后(之前)的时间)
  9. 20190805:两个队列实现栈
  10. AD 脚本kixtart运用之三(添加windows共享打印机)
  11. 使用appendChild巧妙解决火狐下innerHTML无法沿用input数据问题
  12. springcloud之feign远程调用
  13. Hibernate中创建Session(会话)接口的方法
  14. Python实现爬虫程序,付费歌曲一样可以免费下载~
  15. 2022年南京医院三基考试耳鼻咽喉科学精选题及答案
  16. Android仿人人客户端(转)
  17. 解决zui-upload(ZUI: 文件上传 - v1.8.1)移动端上传组件的bug
  18. IO中write函数
  19. 24种游戏化设计工具
  20. python公众号教学_Python微信公众号后台开发教程

热门文章

  1. Classification and Representation
  2. P5385 [Cnoi2019]须臾幻境 LCT+主席树 维护区间联通块个数
  3. BLOB/TEXT column 'name' used in key specification without a key length
  4. 可與言而不與之言,失人。不可與言而與之言,失言。知者不失人,亦不失言。
  5. 基于强化学习工具箱的自适应巡航控制系统
  6. 马来西亚留学回国人员证明
  7. 世界上顶级英文歌曲首选
  8. 房屋托管平台“朴邻”签约法大大,电子合同提升客户签约体验
  9. 白鹤芋一帆风顺花怎么养 一帆风顺花养殖方法及注意事项
  10. neu1482 2014辽宁省赛Picking Cabbage(状态压缩)