c++ - 在 C++ 中将图像数据(R、G 和 B 像素)读入二维数组

标签 c++ arrays image multidimensional-array

我能够很好地读取图像的头文件,但是我无法将红色 channel 的第一个数据值(例如 206)放入二维数组 ppmImage.red[0 ][0]。紧随其后的是空白,然后是绿色 channel 的第一个值,依此类推。

下面是我目前正在做的,而不是 ppmImage.red[0][0] 中的 206,我有 ppmImage.red[0][0]= 2,ppmImage.green[0][0]=0,ppmImage.blue[0][0]=6。作为引用,这些值仅为 8 位值,因此红色、绿色和蓝色属于像素类型并且是 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; 

我假设你的图像文件是一个文本文件,从你的描述来看似乎是这种情况。

关于c++ - 在 C++ 中将图像数据(R、G 和 B 像素)读入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238883/

相关文章:

javascript - 创建一个数组并检查它

javascript - 单击图像以更改按钮的 URL

javascript - 从本地主机加载时图像闪烁

html - 图像 - 单选按钮

c# - Hololens 上的 C# Unity 中未找到模块 C++ .dll

c++ - 无法为整数类型的变量赋值

C++ 对 typedef void (* somename) (arg1, arg2) 的警告;

python - 使用 SWIG 将 C++ 文件包装为 Python 文件

c++ - 与普通数组相比,对 vector 的内存访问速度有多快?

javascript - 将数组的元素附加到字符串