C - DCT变换

时间:2016-03-25 12:03:52

标签: c matrix dct

我有一个练习,写一个关于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矩阵并重新创建图片:((。谢谢

0 个答案:

没有答案