如何在没有特殊库的情况下在C中读取原始图像?

时间:2014-10-17 01:51:40

标签: c image-processing

我正在制作大学项目,我必须在C中读取原始图像,并将值保存到matriz然后应用高斯模糊,我认为我读错了原因,我在Win控制台上得到了这个一个5 x 5像素的原始图像:

228 228 228 228 228
228 228 228 228 228
228 228 228 228 228
228 228 228 228 228
228 228 228 228 228

这是我打印dinamic matriz的时候,我在linux中的合作伙伴只是零,这是我的代码:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>




int main()
{
    FILE *info_image, *image_raw;
    info_image = fopen("picture.inf","r");
    int **matriz_image, test;

    int i, j, rows, colums;


    //i read dimension image
    fscanf(info_image,"%i %i",&colums, &rows);


    //i create dinamic rows
    matriz_image = (int **) malloc (rows*sizeof(int*));

    //i create dinamic colums
    for(i=0;i<rows;i++)
    {

         matriz_image[i] = (int*) malloc (colums*sizeof(int)); 



    }

    //i open image raw
    image_raw = fopen("picture.raw","r");

    //i copy values to matriz_image
    for(i=0;i<rows;i++)
    {
        for(j=0;j<colums;j++)
        {

            //fscanf(image_raw,"%i",*(*(matriz_image+i)+j)); 
            fscanf(image_raw,"%i",&test);
            *(*(matriz_image+i)+j)=test;
            //printf("%i \n", test); 

        }

    }


    //i print matriz
    for(i=0;i<rows;i++)
    {
        for(j=0;j<colums;j++)
        {

            printf("%i ",*(*(matriz_image+i)+j)); 
            //printf("%i ",matriz_image[i][j]); 


        }
        printf("\n");

    }






    getch();

}

1 个答案:

答案 0 :(得分:1)

只要您无法使用文本编辑器打开它,使用fscanf()读取文件是不合理的。相反,你应该尝试fread()。此外,您应该使用模式"rb"打开非纯文本文件的文件。

image_raw = fopen("picture.raw", "rb");
for (i = 0; i < rows; ++i) {
    fread(matriz_image[i], sizeof(int), columns, image_raw);
}