Top / プログラミングおよび実習II / 20061027
[ 高橋のページ ] [ プログラミングおよび実習II2006? ] プログラミングおよび実習II 2006年10月27日 †[edit]今日の課題: 画像をいじろう †[edit]サンプル画像 †[edit]
ブラウザを使って自分の prog2 ディレクトリ内に保存しましょう. 課題1027-A(締切: 今日の実習開始後すぐ,締切後チェック対象外) †[edit]10月26日の演習問題のプリントを提出し,チェックを受けてください. 課題1027-B(締切: 今日の実習終了時) †[edit]以下の二つをまとめてチェックします.リダイレクションによってサンプル画像を入力して出力を適当なファイルに保存し,画像として表示して見せてください. <プログラム image1.c>
<プログラム image2.c>
課題1027-C(おまけ,締切: 今日の実習終了時,締切後チェック対象外) †[edit]これはおまけ課題です.課題Bができた人が対象です.やらなくても実習成績の減点はありませんが,やると加点があるでしょう. '<'や'>'を使って標準入力や標準出力をリダイレクトすると,キー入力や画面への出力の代わりにファイルを使って入出力できました.同じように,'|'(パイプといいます)を使うと,二つのプログラムの標準出力と標準入力をつなぐことができます.例えば, $ ./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の画像フォーマットでは,ヘッダに#ではじまるコメント行を入れることが許されています.画像変換や処理のソフトウェアによってはコメントをつけて出力するものもありますので,そういった画像も自分のプログラムで扱うためには,エディタで一度開いてコメント行を削除する,あるいは,コメント行を読み飛ばせるように自分のプログラムを改造する,という作業が必要になります. |