我正在尝试将灰度图像保存为文本图像,每个像素都存储为我的Image类中的浮点m_p_image
。
/// Number of pixel along the horizontal axis
unsigned int m_width;
/// Number of pixel along the vertical axis
unsigned int m_height;
/// The pixel data
float* m_p_image;
来自Image.cpp
//-------------
Image::Image():
//-------------
m_width(0),
m_height(0),
m_p_image(0)
//------------------
{}
图像文本文件设置如下:
0.500 0.500 0.500 0.500 0.500 0.500 0.500
0.500 0.500 0.000 0.000 0.500 0.500 0.500
0.500 0.500 0.000 0.000 0.500 0.500 0.500
0.500 0.500 0.500 0.500 0.500 0.500 0.500
虽然他们可以有任意数量的花车。
我最好的方法是读取这些浮点数并将它们存储在我的1维浮点数组m_p_image
中,并获取每行浮点数(m_width
)和数字每列上的浮点数(m_height
)?最好将这些行读成字符串,然后再将它们投射出来吗?
答案 0 :(得分:0)
我能想到的最简单的方法是指定文本顶部的列/行,并避免破坏这些行。
看起来像这样:
7 4
0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.000 0.000 0.500 0.500 0.500 0.500 0.500 0.000 0.000 0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.500 0.500
最好将这些行读作字符串,然后再将它们转换成它们吗?
如果你可以确保只有浮动值来,那么直接读取它们就像浮动一样不会是一个坏主意(直到需求在将来发生变化)。
答案 1 :(得分:0)
将它们存储在我的1维浮点数组m_p_image
中
float m_p_image[width*height];
fstream fs("file.txt");
for(int i=0; i<width*height; i++)
fs >> m_p_image[i];
但正如其他帖子所说,如果你想将它们存储在程序中的1d数组中,为什么还要把它们存储为txt中的2d。
获取行数(m_width)和列数(m_height)
如果您不介意将其作为元数据存储在第一行文件中,那就更容易了,比如说
2 3
0.1 0.1
0.1 0.1
0.1 0.1
否则,您始终可以使用getline
函数读取\n
,然后在换行前计算实体数。
string line;
std::getline(fs, line);
stringstream ss(line);
int m_width=0;
while(ss >> m_p_image[m_width++]) ;
可以通过计算对getline的调用来记录m_height。
另外,如果你不喜欢istream,fscanf
也会很好。