首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解PGM数据并将PGM数据加载到向量/数组中

理解PGM数据并将PGM数据加载到向量/数组中
EN

Stack Overflow用户
提问于 2020-09-15 15:59:09
回答 1查看 320关注 0票数 0

首先,我要说,这是我第一次使用C++格式的PGM文件格式,所以我有多个问题。

  1. 我目前正在使用P2 PGM文件,但我看到P5使用起来要简单得多。如何将P2转换为P5?

  1. 和P2,我试图获取图像,并将像素值传输到2D矢量或数组或任何可远程索引的地方。我使用的是非常基本的图像(白色背景,前景中有一个黑色矩形)。到目前为止,我的代码如下:

代码语言:javascript
复制
    fstream img;
    img.open(PATH_NAME, ios::in | ios::binary | ios::out);
    
    string line;
    getline(img, line); //header part that says "P2"

    //stores column and row values
    getline(img, line);
    istringstream iss(line);
    string row_string, col_string;
    iss >> row_string;
    iss >> col_string;
    int original_rows = stoi(row_string);
    int original_cols = stoi(col_string);
    
    getline(img, line);//collects maxval

    //now I am collecting actual image/pixel data
    getline(img, line);
    cout << line;

最后一个部分的问题是,当我cout << line;时,这是输出:

代码语言:javascript
复制
\377\377\377\377\377\377\377\377\377\377\377\377\

并且持续的时间要比一行长得多(我的照片样本中有162列,这段代码的输出远远超过162,377 s)。maxval是255,所以我不太确定问题是什么。

对于实际将这些值转换为可索引的东西,

  1. ,我该怎么做呢?到目前为止,我的想法是获取每个字符串行,检测“\”,并以这种方式收集单个值,并将其存储在数组中;将每个字符串转换为int,然后将其存储在向量中。说起来容易做起来难,所以我愿意接受更有效的选择。
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 16:09:12

问题是,您混淆了文本I/O和二进制I/O。据我了解,P5文件中的图像数据作为二进制字节值保存。因此,您应该使用read将其读入字节向量(或类似的),而不是使用用于文本I/O的getline读取它。

像这样

代码语言:javascript
复制
vector<unsigned char> raster(original_rows*original_cols);
img.read(raster.data(), original_rows*original_cols);

raster是可索引的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63905678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档