如何解决了解PGM数据并将PGM数据加载到向量/数组中
首先说这是我第一次使用C ++处理PGM文件格式,所以我有很多问题。
-
我目前正在使用P2 PGM文件,但我读到P5使用起来要简单得多。如何将P2转换为P5?
-
使用P2,我试图拍摄图像并将像素值传输到2D向量或数组或可远程索引的任何内容。我使用的是非常基本的图像(白色背景,前景中有黑色矩形)。到目前为止,这是我的代码:
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 377s)。最大值是255,所以我不确定是什么问题。
- 关于将这些值实际转换为可索引的内容,我该如何处理?到目前为止,我的想法是采用每条字符串行,检测'\'并以此方式收集各个值并将其存储在数组中;将每个字符串转换为int,然后将其存储在向量中。说起来容易做起来难,所以我愿意接受更有效的选择。
解决方法
问题是您将文本I / O与二进制I / O混淆了。据我了解,P5文件中的图像数据保存为二进制字节值。因此,您应该使用class Game(models.Model):
gameday = models.CharField(max_length=120)
hometeam1 = models.ForeignKey(Teams,on_delete=models.CASCADE,related_name="hometeam1",blank=True,null=True)
class Tipp(models.Model):
hometeam1 = models.ForeignKey(Game,default=Game.hometeam1)
week = models.CharField(max_length=120,null=True,blank=True)
将其读取到字节向量(或类似的字节)中,而不要使用用于文本I / O的read
来读取它。
赞
getline
vector<unsigned char> raster(original_rows*original_cols);
img.read(raster.data(),original_rows*original_cols);
是您可索引的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。