とらりもんHOME  Index  Search  Changes  Login

C言語による画像処理: 画像の右90度回転

前章の画像を, 右回りに90度、回転してみましょう。 これまではrawバイナリーの入出力でしたが, ヘッダーの入出力もプログラムに組み込み, PPM型式の入出力にしてみましょう。 プログラムは以下のようになります:

/* rotR.c
 * reverse rotation to the right of an image
 * usage: $ ./rotR < source_image.ppm > destin_image.ppm
 * compile: $ gcc rotR.c -o rotR
 * 2011/05/15 Kenlo Nishida
 */

# include <stdio.h>
# define XL 800
# define YL 600
# define BPP 3

short linescan(FILE *fp, char *buff)
{int in=0, i=0;
 while((in=fgetc(fp))!='\n' && feof(fp)==0)
     {buff[i]=in;
      i++;}
 buff[i]=0;
 return(feof(fp));
}

main()
{short xi, yi, xo, yo;
 char head[255];
 unsigned char data[BPP*XL*YL];

 linescan(stdin, head);
 printf("%s\n", head);
 linescan(stdin, head);
 printf("%s\n", head);
 linescan(stdin, head);
 printf("600 800\n");
 linescan(stdin, head);
 printf("%s\n", head);
 fread(data, BPP, XL*YL, stdin);
 for (yo=0; yo<XL; yo++)
    for (xo=0; xo<YL; xo++)
          {xi=yo;
           yi=YL-1-xo;
           fwrite(&data[BPP*(XL*yi+xi)], BPP, 1, stdout);
          }
   }

これを, 以下のようにコンパイルして実行してみて下さい:

$ gcc rotR.c -o rotR
$ ./rotR < lake.ppm > lake_rotR.ppm
$ display lake_rotR.ppm
lake_rotR.jpg
↑lake_rotR.ppm 

課題: 画像lake.ppmを, 左回りに90度, 回転してみよ。

画像解析入門に戻る!

Last modified:2018/10/22 13:52:14
Keyword(s):
References:[画像解析入門]