mp4视频转rosbag文件(图片压缩格式)

2023-12-26 16:20

本文主要是介绍mp4视频转rosbag文件(图片压缩格式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

目的

环境

主要步骤

创建py文件

执行py文件

效果

 程序解释

后续调整


目的

将相机录制的mp4格式文件,转为ROS系统能使用的bag格式文件。

环境

安装有ROS和python2

主要步骤

创建py文件

新建python文件Video2ROSbag.py

#this is ok
# -*- coding: utf-8 -*-
import rosbag
import cv2
from sensor_msgs.msg import CompressedImage
from cv_bridge import CvBridge
import rospydef video_to_bag(video_path, output_bag):bag = rosbag.Bag(output_bag, 'w')cap = cv2.VideoCapture(video_path)cb = CvBridge()prop_fps = cap.get(cv2.CAP_PROP_FPS)if prop_fps != prop_fps or prop_fps <= 1e-2:print "Warning: can't get FPS. Assuming 24."prop_fps = 24prop_fps = 24ret = Trueframe_id = 0while ret:ret, frame = cap.read()if not ret:breakstamp = rospy.rostime.Time.from_sec(float(frame_id) / prop_fps)frame_id += 1compressed_image = CompressedImage()compressed_image.header.stamp = stampcompressed_image.header.frame_id = "camera"compressed_image.format = "jpeg"  # 使用JPEG压缩格式# 将图像转换为压缩格式_, compressed_data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])compressed_image.data = compressed_data.tostring()bag.write("/camera/image_raw/compressed", compressed_image, stamp)bag.close()cap.release()# 输入视频文件和输出bag文件名
video_path = 'video2bag.mp4'
output_bag = 'video2bag.bag'# 调用函数进行转换
video_to_bag(video_path, output_bag)

以下参数根据需要,相应的修改:

视频路径video_path

保存的bag文件路径output_bag

图像的话题名,文中是“/camera/image_raw/compressed”

图像的坐标系compressed_image.header.frame_id,文中是"camera"

 图像的压缩格式compressed_image.format,文中是"jpeg"

视频帧率prop_fps,文中固定为24,根据需要调整程序。

执行py文件

python Video2ROSbag.py

效果

生成bag文件。

查看bag信息:

 $rosbag info video2bag.bag      
path:        video2bag.bag
version:     2.0
duration:    6.3s
start:       Jan 01 1970 00:00:00.00 (0.00)
end:         Jan 01 1970 00:00:06.33 (6.33)
size:        8.1 MB
messages:    153
compression: none [11/11 chunks]
types:       sensor_msgs/CompressedImage [8f7a12909da2c9d3332d540a0977563f]
topics:      /camera/image_raw/compressed   153 msgs    : sensor_msgs/CompressedImage

 程序解释

        _, compressed_data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])

代码片段`_, compressed_data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])` 是用于将图像数据进行压缩编码的一行代码。

具体来说,这个函数调用了OpenCV库的 `imencode()` 方法,用于将给定的图像数据进行压缩编码,生成相应的压缩数据。

其中参数含义如下:

- `.jpg`:表示压缩编码格式为JPEG格式。
- `frame`:要进行压缩编码的原始图像数据。
- `[int(cv2.IMWRITE_JPEG_QUALITY), 90]`:设置JPEG压缩的质量参数,即设置压缩后图像的质量为90。

函数返回值包括两个变量:

- `_`:表示忽略的变量,通常用于忽略不需要使用的返回值。
- `compressed_data`:经过压缩编码后的图像数据,以字节流的形式表示。

通过这个函数调用,你可以将原始图像数据进行JPEG压缩编码,并将压缩后的数据存储在 `compressed_data` 变量中,以便后续使用或传输。

        compressed_image.data = compressed_data.tostring()

代码片段`compressed_image.data = compressed_data.tostring()` 用于将压缩后的图像数据存储到 ROS 消息对象 `compressed_image` 中。

具体来说,假设 `compressed_data` 是一个包含了经过压缩编码后的图像数据的对象(通常是一个字节流或字符串),通过 `tostring()` 方法将其转换为字符串形式,并将结果赋值给 `compressed_image.data`。这样,`compressed_image.data` 就包含了压缩后的图像数据,可以被传输或保存到 ROS 消息中。

这一步通常是在将图像数据转换为 ROS 消息格式时进行的操作,以便在 ROS 系统中进行传输、存储和处理。

        bag.write("/camera/image_raw/compressed", compressed_image, stamp)

这段代码片段,`bag.write("/camera/image_raw/compressed", compressed_image, stamp)` 是用于将 `compressed_image` 数据写入 ROS bag 文件的一行代码。

这个函数调用了 ROS 的 `write()` 方法,用于将指定的消息数据写入到 ROS bag 文件中。其中参数含义如下:

- `"/camera/image_raw/compressed"`:表示写入数据的话题(topic)名称,即将 `compressed_image` 数据写入到名为 "/camera/image_raw/compressed" 的话题中。
- `compressed_image`:要写入的消息数据,即 `CompressedImage` 类型的对象。
- `stamp`:时间戳,用于标记消息数据的时间。

通过这个函数调用,你可以将 `compressed_image` 数据以及对应的时间戳写入 ROS bag 文件,以备后续的数据回放或分析使用。

后续调整

图中明显发现时间戳还是1970/1/1开始需要调整。

后续参考mp4视频转rosbag文件(图片压缩、画面旋转、时间戳调整)-CSDN博客

这篇关于mp4视频转rosbag文件(图片压缩格式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540107

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的