[英]Reading image data (R,G, & B pixel) into 2D arrays in C++
我能够很好地读取图像的头文件,但是在将红色通道(例如206)的第一个数据值放入2D数组ppmImage.red[0][0]
遇到麻烦。 后面跟随一个空格,然后是绿色通道的第一个值,依此类推。
以下是我当前正在执行的操作,而不是在ppmImage.red[0][0]
中显示206,而我拥有了ppmImage.red[0][0]
= 2, ppmImage.green[0][0]
= 0,并且ppmImage.blue[0][0]
= 6。 作为参考,这些将仅是8位值,因此红色,绿色和蓝色为pixel类型,并且为unsigned char
。
void readTextData(fstream &fin, struct ppmImage &image)
{
int iii, jjj;
for(iii = 0; iii < image.rows ; iii++)
{
for(jjj = 0; jjj < image.cols; jjj++)
{
fin >> image.red[iii][jjj];
fin >> image.green[iii][jjj];
fin >>image.blue[iii][jjj];
}
}
fin.close();
}
我以为fin >>
会一直读到空白为止,但我弄错了。 我也尝试使用fin.read((char *) & image.redgray[iii][jjj],sizeof(pixel));
但结果却一样。
数据可以采用以下形式:
1 2
3 4 5
6 7 8 9
而且我不确定如何处理'\\ n'。
我一直在寻找信息,结果比以前更加困惑。 我希望朝正确的方向轻描淡写,或者有人指出我的愚蠢。 提前致谢。
这听起来像一个简单的解决方法,您必须读取不是unsigned char的整数。 由于您的图片使用无符号字符,因此您只需添加一些用于读取的临时整数即可。
int red, green, blue;
fin >> red >> green >> blue;
image.red[iii][jjj] = red;
image.green[iii][jjj] = green;
image.blue[iii][jjj] = blue;
我假设您的图像文件是文本文件,从您的描述来看似乎是这种情况。
如果可能的话,我将从包含数组的结构更改为结构的数组:
struct pixel {
unsigned char red, green, blue;
friend std::istream &operator>>(std::istream &is, pixel &p) {
unsigned int red, green, blue;
is >> red >> green >> blue;
p.red = red;
p.green = green;
p.blue = blue;
return is;
}
};
// ...
for (i = 0; i<image.cols; i++)
for (j=0; j<image.rows; j++)
if (!infile >> pixels[i][j])
break; // read failed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.