在C ++中保存2D数组的灰度图像

时间:2015-02-20 22:13:08

标签: c++ arrays image file

我有一个大小为320x240的2D数组,其中包含0到255之间的值。我想将此数据存储为灰度图像。

这是我到目前为止编写的代码:

int val[320][240];
FILE *image = fopen("depth.png","wb");
for (i=0; i < 320; i++)
{
    for (j=0; j<240; j++)
{
    printf("\nWriting to pixel %d %d in image",i,j);
    fwrite(&val[i][j], sizeof(int), sizeof(int),image);
}
}

fclose(image);

但是此代码无法生成正确的图像。请提供更正代码的建议。

2 个答案:

答案 0 :(得分:0)

您还需要担心其他问题 - 例如图像文件的格式。但是,您尝试使用以下行是错误的:

fwrite(&val[i][j], sizeof(int), sizeof(int), image);

如果sizeof(int)为4,则会写入4 x 4个字节。你需要写一个整数:

fwrite(&val[i][j], sizeof(int), 1, image);

不仅如此,你最终还是会越界访问数组,这将导致未定义的行为。

答案 1 :(得分:0)

由于您的数组包含原始图像数据,您需要以原始格式编写它,例如yuv 4:0:0。你的精度是uint8,(0 255),你需要用无符号的char精度来写每个像素。

unsigned char val[320][240];
FILE *image = fopen("depth.yuv", "wb");
for (unsigned int i = 0; i < 320; i++)
{
    for (unsigned int j = 0; j< 240; j++)
    {
        fwrite(&val[i][j], sizeof(unsigned char), 1, image);
    }
}

fclose(image);