在C++中将图像数据(R,G和B像素)读取到2D数组中
Reading image data (R,G, & B pixel) into 2D arrays in C++
我能够很好地读取图像的头文件,但是我无法将红色通道的第一个数据值(例如 206)放入 2D 数组ppmImage.red[0][0]
。后面是空格,然后是绿色通道的第一个值,依此类推。
下面是我目前正在做的事情,而不是 206 在 ppmImage.red[0][0]
中,我有 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
而且我不确定我将如何处理""。
我搜索了信息,结果比现在更困惑。我希望有人朝着正确的方向推动,或者有人指出我的愚蠢。提前谢谢。
这听起来像一个简单的修复,你必须读取整数而不是无符号字符。由于您的图像使用无符号字符,因此您需要做的就是添加一些用于读取的临时整数。
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
相关文章:
- 如何使用Qt读取我的应用程序屏幕像素数据
- 如何在C 中读取DICOM像素
- OpenGL使用glfw通过HIDDEN窗口进行屏幕外渲染和读取像素值
- 读取的像素类型
- 从位图图像文件读取像素数据值
- 在 c++ 中读取"bitmap"像素
- C/C++LIBTIFF:需要从BW TIFF文件中读取白色和黑色像素的像素位置
- 我必须更改的内容是我可以从数组中读取像素值
- 无法读取正确的 PGM 像素值
- OpenCV读取图像像素值
- 在 C 和 C++ 中从 JPEG 读取黑白像素作为数组
- 在C++中将图像数据(R,G和B像素)读取到2D数组中
- 使用 boost.gil 逐像素读取.png文件
- SDL 从纹理中读取像素
- big_endian和little_endian的图像像素读取
- 如何从Mat变量编辑/读取OpenCv中的像素值
- 从bmp文件读取RGB像素
- 在像素GLSL中存储(并读取)大量数据
- SDL2逐像素读取PNG24
- 从Qt中的每个像素读取Alpha通道