介绍ROS中用到的pgm图像 如何由cv Mat生成pgm

介绍ROS中用到的pgm图像 如何由cv Mat生成pgm

ROS(Robot Operating System)是一个开源的机器人操作系统平台,提供了软件库和工具以帮助开发机器人应用。在ROS中,pgm(Portable Gray Map)图像是地图数据的一种常用格式,通常用于导航和定位任务。pgm图像是一种灰度图像,可以存储每个像素的灰度值,范围从0(黑色)到255(白色)。

为了从OpenCV的Mat对象生成pgm图像,你需要执行以下步骤:

  1. 首先,确保你已经安装了OpenCV库。在ROS中,你可以使用rosdep来安装相应的依赖项。例如,对于ROS Noetic版本,可以通过以下命令安装:
    1
    2
    sudo apt-get install ros-noetic-opencv-contrib

  2. 在你的C++代码中,包含所需的头文件:
    1
    2
    3
    4
    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>

  3. 将你的原始图像转换为灰度图像。这可以使用OpenCV的cvtColor()函数完成。例如:
1
2
3
4
cv::Mat input_image; // 这是你的原始图像
cv::Mat gray_image;
cv::cvtColor(input_image, gray_image, cv::COLOR_BGR2GRAY);

  1. 将灰度图像调整到合适的尺寸和灰度范围。你可能需要对灰度图像进行缩放、裁剪或阈值处理。例如,使用resize()函数进行缩放:
1
2
3
cv::Mat resized_image;
cv::resize(gray_image, resized_image, cv::Size(new_width, new_height));

  1. 将处理后的灰度图像保存为pgm文件。你可以使用OpenCV的imwrite()函数将Mat对象保存为pgm格式的文件。例如:
1
2
3
std::string output_file_path = "/path/to/your/output/file.pgm";
cv::imwrite(output_file_path, resized_image);

完成以上步骤后,你就可以将OpenCV的Mat对象转换为ROS中使用的pgm图像格式了。

pgm与png的不同之处

PGM(Portable Gray Map)和PNG(Portable Network Graphics)都是图像文件格式,它们有一些重要的区别:

  1. 颜色模式:
  • PGM:PGM 图像是一种灰度图像格式,只包含灰度信息。灰度值的范围通常是从 0(黑色)到 255(白色)。
  • PNG:PNG 是一种支持多种颜色模式的图像格式,包括灰度、真彩色(RGB)、带透明通道的真彩色(RGBA)等。这意味着 PNG 可以存储更丰富的颜色信息。
  1. 文件大小和压缩:
  • PGM:PGM 图像通常使用无损压缩,但压缩效果相对较弱。因此,PGM 图像文件可能相对较大。
  • PNG:PNG 图像使用的是 DEFLATE 无损压缩算法,这使得 PNG 文件在保持图像质量的同时,具有较小的文件大小。
  1. 透明度支持:
  • PGM:由于 PGM 只存储灰度信息,所以不支持透明度。
  • PNG:PNG 支持透明度信息,可以使用带有 Alpha 通道的 RGBA 颜色模式来表示透明度。
  1. 兼容性和应用场景:
  • PGM:PGM 格式简单,易于解析和处理,常用于科学计算、图像处理和机器人领域,如 ROS(Robot Operating System)中的地图表示。
  • PNG:PNG 格式广泛应用于 Web 和各种图像编辑软件中,因为它支持丰富的颜色模式和透明度,且具有较好的压缩效果。

介绍ROS中用到的pgm图像 如何由cv Mat生成pgm
https://qiangsun89.github.io/2023/04/27/介绍ROS中用到的pgm图像-如何由cv-Mat生成pgm/
作者
Qiang Sun
发布于
2023年4月27日
许可协议