【问题标题】:Saving JPG encoded array from a ROS sensor_msgs/CompressedImage to a file in roscpp将 ROS sensor_msgs/CompressedImage 中的 JPG 编码数组保存到 roscpp 中的文件
【发布时间】:2017-06-16 07:49:49
【问题描述】:

我有一个机器人操作系统 (ROS) .bag 文件,其中包含 sensor_msgs/CompressedImage 消息形式的 .jpg 压缩图像。我编写了一个 roscpp 程序,可以访问单个消息中的原始数据,但是我很难将原始 jpg 编码数据数组保存到文件中。

不幸的是,我的包文件非常大,包含数千张图片,而且我的工作时间有限。我尝试使用 rosbag play -i 和 image_view export 来保存图像,但是太慢了。我也尝试过使用 Python,但是 Python 很慢,而且我没有办法保存图像(与 C++ 中的问题相同)。

本质上,我需要一种方法来为我的数据添加一个有效的 jpg 标头并将其保存在一个文件中。任何建议表示赞赏!

【问题讨论】:

  • 尝试合成 jpeg 标头似乎是错误的方法...您需要的所有信息必须已经在源数据中,否则这些工具将如何向您显示它们?
  • 源数据给了我一个字节数组,一个时间戳,并告诉我数据是 bgr8 jpg 编码的。我想我可以将数组保存到文件中看看是否可行?
  • 值得一试。如果您查看初始和最终字节值,您也可以检查 jpeg 幻数... jpeg 文件应以 FF D8 开头并以 FF D9 结尾
  • 确实如此!伟大的。那么应该很容易:D
  • 谜团解开了。我会添加它作为答案,以防它对其他人有用。

标签: c++ jpeg ros


【解决方案1】:

为应该已经是图像的数据块创建图像标题可能不是正确的方法。毕竟,jpeg 很复杂,数据流应该包含解码它们所需的所有信息......这些工具还能如何向您显示它们?

通过查看第一个和最后一个字节,您可以很好地了解二进制 blob 是否包含图像。例如,JPEG 以FF D8 开头并以FF D9 结尾。其他文件的一些幻数可以在这里找到:https://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2015-01-20
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 2015-12-11
    相关资源
    最近更新 更多