全覆盖路径规划数据制作jpg转pgm

生成自己想要的JPG数据,然后转成PGM数据

  • JPG数据的制作
  • 转PGM数据

JPG数据的制作

  习惯性使用c++,所以在制作JPG数的时候采用的**c++**写的,代码如下:

void moCreateImg()
{
    
    cv::Mat test_map(800,800,CV_8UC3,cv::Scalar(0,0,0));
    Rect rec = cv::Rect(cv::Point(200,200),cv::Point(600,600));
    vector<Point>  contour;
    contour.push_back(rec.tl());   // 左上角坐标信息
    contour.push_back(Point(rec.tl().x + rec.width , rec.tl().y ) );  // 右上角
    contour.push_back(Point(rec.tl().x + rec.width , rec.tl().y + rec.height)); // 左下角
    contour.push_back(Point(rec.tl().x , rec.tl().y + rec.height )); // 右下角

    // 多边形填充
    cv::fillConvexPoly(test_map, contour, cv::Scalar(255,255,255));//fillPoly函数的第二个参数是二维数组!!

    // 显示
    cv::namedWindow("test_map", cv::WINDOW_AUTOSIZE);
    cv::imshow("test_map", test_map);
    // 保存
    imwrite("./reuslt.jpg",test_map);

    waitKey(0);

}

生成的结果如下:
全覆盖路径规划数据制作jpg转pgm_第1张图片

转PGM数据

  生成jpg文件以后,先检查全覆盖路径规划中使用的数据是什么格式的,通过NotePad++软件打开以后发现是P5格式的:
  普及一下pgm格式,PGM文件的格式类型有P2和P5,但是我在转换的过程中发现还有P6,P2是纯文本格式,P5是二进制格式,从下图可知我需要的是P5二进制格式的pgm数据。
在这里插入图片描述  一开始采用C++实现,代码繁琐,后来直接用python进行转换,顿时感觉python太强了。

# coding=utf-8 
from PIL import Image
import os.path
import glob
 
# python 函数
def jpg2pgm( jpg_file , pgm_dir ):
    # 首先打开jpg文件
    jpg = Image.open( jpg_file )
    out_name =(str)(os.path.join( pgm_dir , os.path.splitext( os.path.basename(jpg_file) )[0] ))+".pgm"
    # 创建目标pgm 文件
    jpg.convert('L').save(out_name)
    print("Save succeed!!!")
 
# 将所有的jpg文件放在当前工作目录,或者 cd {存放jpg文件的目录}
for jpg_file in glob.glob("/home/ai/work/workspace/robot/path_planning/*.jpg"):
    jpg2pgm( jpg_file , "/home/ai/work/workspace/robot/path_planning/")

注意:
其中比较重要的是jpg.convert(‘L’),如果没有这一句命令,转换出来的是P6格式的pgm数据,因为我生成的jpg是三通道的,从上面的代码中可以看到。
结果如下:
全覆盖路径规划数据制作jpg转pgm_第2张图片
科普:
jpg = jpg.convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式

PIL有九种不同模式:

1: 1位像素,黑白,每字节一个像素存储
L: 8位像素,黑白
P: 8位像素,使用调色板映射到任何其他模式
RGB: 3x8位像素,真彩色
RGBA: 4x8位像素,带透明度掩模的真彩色
CMYK: 4x8位像素,分色
YCbCr: 3x8位像素,彩色视频格式
I: 32位有符号整数像素
F: 32位浮点像素

=================================== 附加==================================
全覆盖路径使用该数据集结果:
全覆盖路径规划数据制作jpg转pgm_第3张图片

仿真机器人运行结果:
全覆盖路径规划数据制作jpg转pgm_第4张图片

你可能感兴趣的:(c++编程,全覆盖路径规划,c++,ubuntu,python)