ページ 11

画像を半分に切り抜くプログラム

Posted: 2012年11月11日(日) 16:58
by kerotan0820
OS:ubuntu
コンパイラ:gcc
言語:C
コマンドラインからシェルスクリプトで実行しています。

今現在、画像処理プログラミングの練習として、画像を半分に切り抜くという課題を行っています。
右半分を切り出す課題に挑戦してみたのですが、どれも正常な画像が出力されず、このようになってしまいました。
output.jpeg
output.jpeg (40 KiB) 閲覧数: 3531 回
(画像の下のほうがくろくなっているのはコマンドラインでppm形式をjpeg形式に変換しようとしたところなぜかできてしまいました)
(コマンドは:  cjpeg ./デスクトップ/lake_right.ppm > ./デスクトップ/lake_right.jpeg )

本題なのですが、下のとおり手順を進めました。

①コンパイル

コード:

$ gcc ./デスクトップ/cutimage_right.c -o ./デスクトップ/cutimage_right
結果 cutimage_right というオブジェクトコードファイルが生成されました。

ソースはこの通りです。

コード:


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

int main()
{
  short x,y;
  unsigned char data[BPP];
  
  for(y=0; y<YL; y++)				//y軸 巡回
  {
    for(x=0;x<XL; x++)				//x軸 巡回
    {
      fread(data, BPP, 1, stdin);		//標準入力から読み込み
      if(x>XL/2) fwrite(data, BPP, 1, stdout);	//
    }
  }
}
②プログラムを実行(画像ファイルを与え、処理を加えた画像を出力)

コード:

$ ./デスクトップ/cutimage_right <./デスクトップ/lake.raw> ./デスクトップ/lake_right.raw
③画像のヘッダー情報を作り rawバイナリーファイルとドッキングする。
ファイル名: lake_right.ppm
内容:

コード:

P6
#
400 600
255

コード:

$ cat ./デスクトップ/lake_right.raw >> ./デスクトップ/lake_right.ppm
そして lake_right.ppm ファイルを開いて見たところ、ねじれるような描画の画像になってしまっていました。
この課題の見本のプログラムでは、出力部分の条件

コード:

if(x>XL/2) fwrite(data, BPP, 1, stdout);	//
これは以下のとおりでした。

コード:

if(x<XL/2) fwrite(data, BPP, 1, stdout);	//
xがX軸最大値であるXLの半分未満である間という条件で左半分が出力できたので
xがX軸最大値であるXLの半分より大きい間という条件で右半分が出力されないかと思ったのですが、されませんでした。
原因が分からず困っております。
ご教示お願いいたします。

Re: 画像を半分に切り抜くプログラム

Posted: 2012年11月11日(日) 19:00
by ISLe
kerotan0820 さんが書きました:xがX軸最大値であるXLの半分未満である間という条件で左半分が出力できたので
xがX軸最大値であるXLの半分より大きい間という条件で右半分が出力されないかと思ったのですが、されませんでした。
原因が分からず困っております。
「より大きい」ではなく「以上」なのでは?

Re: 画像を半分に切り抜くプログラム

Posted: 2012年11月11日(日) 21:39
by kerotan0820
ISLe さんが書きました:
kerotan0820 さんが書きました:xがX軸最大値であるXLの半分未満である間という条件で左半分が出力できたので
xがX軸最大値であるXLの半分より大きい間という条件で右半分が出力されないかと思ったのですが、されませんでした。
原因が分からず困っております。
「より大きい」ではなく「以上」なのでは?

その通りでした。
お恥ずかしい限りです。
ありがとうございました。