我有一个练习,写一个关于dct变换的简单c编程(读取img并打入块8x8矩阵 - 做dct - 做idct - 重新创建图片,它必须与原始图像几乎相同) 我完成了step2,3 - dct和idct,但现在我不知道如何读取img并将其分解为矩阵,设备矩阵为8x8并重新创建图片形式idct。 我写了它来阅读img并打入8x8,但没有工作
#include <stdio.h>
int main()
{
FILE *fp = fopen("D:\img.jpg","rb");
if(!fp)
printf("Can not load image");
int width = 400;
int height = 600;
unsigned char buff[(400*600)];
unsigned char image[400][600];
size_t n = fread( buff, sizeof(buff[0]), sizeof(buff), fp );
fclose(fp);
for(int i =0; i < height; i++)
{
for(int j = 0; j < width;j++)
{
image[j][i] = buff[(i*width)+j];
}
}
unsigned char dividedimage[(400*600)/(8*8)][8][8];
for(int i = 0; i < height/8; i++)
{
for(int j = 0; j < width/8;j++)
{
for(int k = i*8, l = 0; k < (i*8)+8; k++,l++)
{
for(int m = j*8, n = 0; m < (j*8)+8; m++,n++)
{
dividedimage[(i*(width/8))+j][n][l] = image[m][k];
}
}
}
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
printf("%8.3f ", image[i][j]);
printf("\n");
}
}
任何人都可以告诉我如何将img分解为块8x8矩阵并重新创建图片:((。谢谢