我正在制作大学项目,我必须在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();
}
答案 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);
}