Top / プログラミングおよび実習II / 20051027
[ 高橋のページ ] [ プログラミングおよび実習II? ] プログラミングおよび実習II 2005年10月27日[edit]今日の課題: 画像を読み書き・加工するプログラムを作ろう[edit]サンプル画像: uni3ascii.pgm uni3kowai.pgm (学内からしかアクセスできません) ブラウザを使って自分の prog2 ディレクトリ内に保存しましょう. 課題1027-A (締切:10月27日,延長不可)[edit]10月26日の演習問題を提出しチェックを受けて下さい. 課題1027-B (締切:10月27日,締切延長権を使うと11月10日まで)[edit]以下の二つをまとめてチェックします. <プログラム image1.c>
<プログラム image2.c>
課題1027-C (締切:10月27日,1027-Bを10月27日に提出した人のみ対象のボーナス課題,延長不可)[edit]'<'や'>'を使って標準入力や標準出力をリダイレクトすると,キー入力や画面への出力の代わりにファイルを使って入出力できました.同じように,'|'(パイプといいます)を使うと,二つのプログラムの標準出力と標準入力をつなぐことができます.例えば, $ ./image1 < uni3ascii.pgm | ./image2 > hoge.pgm とすると,次のように画素反転と左右反転を一度に行うことができます.
では,サンプル画像の uni3kowai.pgm を入力として, $ ./image1 < uni3kowai.pgm | ./imge2 | ./image3 > hoge.pgm と実行すると hoge.pgm が uni3ascii.pgm と同じ画像になるようなプログラム image3.c を作りましょう. おまけ[edit]いろんな画像を加工してみたいという人は[edit]実習室のLinux環境では,Netpbmという画像変換・処理ツール群が使えます. 例えばhoge.jpgという名前のJPEG画像が手元にあるとしたら, % jpegtopnm < hoge.jpg > hoge.ppm とすると,PPM(バイナリ形式)の画像ファイル hoge.ppm が作成されます.次に, % ppmtopgm -plain < hoge.ppm > hoge.pgm とすると,PGM(アスキー形式)の画像ファイル hoge.pgm が作成されます.もちろん,二つのコマンドをパイプでつないで % jpegtopnm < hoge.jpg | ppmtopgm -plain > hoge.pgm としても構わないですね. この hoge.pgm を自分の作ったプログラムに入力して遊んでみるとよいでせう. ちなみに,上記の -plain というのは,ppmtopgmが出力するPGM画像をバイナリ形式 ではなくアスキー形式にするためのオプションです.jpegtopnmにこのオプションをつけて % jpegtopnm -plain < hoge.jpg > hoge.ppm とすれば,hoge.ppm はアスキー形式のPPM画像になります.この画像形式を解読してカラー画像をいじって遊ぶとさらに楽しいかも. ところで,PNMの画像フォーマットでは,ヘッダに#ではじまるコメント行を入れることが許されています.画像変換や処理のソフトウェアによってはコメントをつけて出力するものもありますので,そういった画像も自分のプログラムで扱うためには,エディタで一度開いてコメント行を削除する,あるいは,コメント行を読み飛ばせるように自分のプログラムを改造する,という作業が必要になります. ポインタについて復習しよう[edit]こちらをどうぞ: 「ポインタの話」 |