首先,我要说,这是我第一次使用C++格式的PGM文件格式,所以我有多个问题。
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;时,这是输出:
\377\377\377\377\377\377\377\377\377\377\377\377\并且持续的时间要比一行长得多(我的照片样本中有162列,这段代码的输出远远超过162,377 s)。maxval是255,所以我不太确定问题是什么。
对于实际将这些值转换为可索引的东西,
发布于 2020-09-15 16:09:12
问题是,您混淆了文本I/O和二进制I/O。据我了解,P5文件中的图像数据作为二进制字节值保存。因此,您应该使用read将其读入字节向量(或类似的),而不是使用用于文本I/O的getline读取它。
像这样
vector<unsigned char> raster(original_rows*original_cols);
img.read(raster.data(), original_rows*original_cols);raster是可索引的东西。
https://stackoverflow.com/questions/63905678
复制相似问题