画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

Similar documents
情報処理演習 B8クラス

Microsoft PowerPoint - kougi6.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi8.ppt

Microsoft PowerPoint - kougi7.ppt

Microsoft Word - Training10_プリプロセッサ.docx

memo

slide5.pptx

PowerPoint Presentation

Microsoft Word - Cプログラミング演習(10)

PowerPoint Presentation

2006年10月5日(木)実施

Microsoft PowerPoint - kougi2.ppt

Taro-ファイル処理(公開版).jtd

V

演算増幅器

PowerPoint Presentation

Microsoft PowerPoint - guidance.ppt

DVIOUT

Microsoft Word - no15.docx

Prog1_12th

演算増幅器

ファイル入出力

Microsoft PowerPoint - kougi4.ppt

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

cp-7. 配列

Microsoft Word - Cプログラミング演習(12)

ファイル入出力

C言語講座 ~ファイル入出力編~

slide4.pptx

Microsoft Word - no204.docx

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Java講座

計算機プログラミング

Microsoft PowerPoint - kougi11.ppt

pp2018-pp9base

Microsoft PowerPoint - 計算機言語 第7回.ppt

※ ポイント ※

ポインタ変数

Microsoft PowerPoint - prog04.ppt

kiso2-09.key

Microsoft Word - Cプログラミング演習(9)

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft PowerPoint - 12.ppt [互換モード]

Cプログラミング1(再) 第2回

Prog1_10th

Microsoft PowerPoint - 13.ppt [互換モード]

Microsoft PowerPoint - 第3回目.ppt [互換モード]

プログラミング基礎

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - handout09.ppt

Microsoft PowerPoint - adi05.ppt [互換モード]

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - OOP.pptx

< F2D837C E95CF CF68A4A94C5816A2E6A>

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミング実習I

ゲームエンジンの構成要素

基礎プログラミング2015

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - lec10.ppt

プログラミング基礎

第9回 配列(array)型の変数

PowerPoint プレゼンテーション

gengo1-12

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

第2回講義:まとめ

02: 変数と標準入出力

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

プログラミング基礎

gengo1-12

Prog1_6th

Taro-2分探索木Ⅰ(公開版).jtd

PowerPoint プレゼンテーション - 物理学情報処理演習

メソッドのまとめ

ex04_2012.ppt

練習&演習問題

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Microsoft PowerPoint - 14th.ppt [互換モード]

Microsoft PowerPoint - prog08.ppt

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

講習No.9


gengo1-12

PowerPoint プレゼンテーション

ポインタ変数

01-introduction.ppt

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

memo

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

テキスト処理第 2 回 田中哲産業技術総合研究所情報技術研究部門 akira/textprocess/

スライド 1

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi9.ppt

PowerPoint プレゼンテーション

プログラミングA

Transcription:

第 14 回 応用 情報処理演習 ( テキスト : 第 10 章 )

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

特定色の画素の検出 ( テキスト 134 ページ ) 画像データが保存されているファイルを読み込んで, 特定色の画素の位置を検出するプログラムを作成しなさい 元画像生成画像 ( 結果の画像 ) 赤色ピクセルの検出 元画像で赤色の画素だけ黒にし, それ以外の画素は白にした画像を生成する

特定色の画素の検出 画像は平面上に配置された画素の集まり 二次元配列に画像データを入れる 配列の各要素に対して同様の処理を施す場合, 繰り返しを使ったプログラムを記述する 二次元配列を扱うので, 二重ループを作成する ある画素の色が特定色であれば, 見つけたときの処理, そう出なければ, 見つけなかったときの処理を実行するので, 条件分岐を使う ピクセルの値 ( 配列に入っている値 ) で判断する

プログラムの流れ ( テキスト 136 ページ ) 1. 定数の定義 2. 各種変数, 配列の宣言 3. ファイルから画像データを読み込む 4. 赤色画素の検出, 結果の画像の生成 ( ループ ) 5. ファイルへ結果画像の書き出し

画素の値で処理を変える if ((R >= 200) && (G <= 50) && (B <= 50)) { 赤い画素 の処理( 見つけたときの処理 ) } else { 赤い画素でない の処理 } // ただし R,G,B は画素の各色の画素値を示す 赤色は RGB でどういう値になるのか? R >= 200 G <= 50 B <= 50 このようにしてみる

すべての画素で処理を行う for (i = 0; i < height; i++) { } for (j = 0; j < width; j++) { } if ((R >= 200) && (G <= 50) && (B <= 50)) { } else { } 赤い画素 の処理 ( 見つけたときの処理 ) 赤い画素でない の処理 すべての画素を対象に値のチェックを行う 二次元配列 二重ループ 画素の値で処理を変える

#include <stdio.h> 定数の定義と変数の宣言 int main (int argc, const char * argv[]) { const int MAX_WIDTH = 640; const int MAX_HEIGHT = 480; int width, height; /* 画像を入れる 2 次元配列の宣言 */ unsigned char SrcImageR[MAX_HEIGHT][MAX_WIDTH]; unsigned char SrcImageG[MAX_HEIGHT][MAX_WIDTH]; unsigned char SrcImageB[MAX_HEIGHT][MAX_WIDTH]; unsigned char ExImageR[MAX_HEIGHT][MAX_WIDTH]; unsigned char ExImageG[MAX_HEIGHT][MAX_WIDTH]; unsigned char ExImageB[MAX_HEIGHT][MAX_WIDTH]; const char InFileName[] = "ColorChars.ppm"; /* 入力ファイルの名前 */ const char OutFileName[] = "ExtRed.ppm"; /* 出力ファイルの名前 */ FILE *f; const int LEN = 100; char line[len]; int i, j;

/* ファイルからの読み込み */ データの読み込み f = fopen(infilename, "r"); if ( f == NULL ) { fprintf(stderr, " ファイル %s のオープンに失敗しました ", InFileName); return -1; } fgets(line, LEN, f); /* 1 行目は読み飛ばす */ fgets(line, LEN, f); while (line[0] == '#') { /* コメントは読み飛ばす */ fgets(line, LEN, f); } /* 画像の幅と高さ */ sscanf(line, "%d %d", &width, &height); fgets(line, LEN, f); /* データの3 行目は読み飛ばす */ for ( i = 0; i < height; i++ ) { for ( j = 0; j < width; j++) { fread( &(SrcImageR[i][j]), 1, 1, f); fread( &(SrcImageG[i][j]), 1, 1, f); fread( &(SrcImageB[i][j]), 1, 1, f); } } fclose(f);

条件を満たす画素の検出 for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { if ((SrcImageR[i][j] >= 200) && (SrcImageG[i][j] <= 50) && (SrcImageB[i][j] <= 50)) { ExImageR[i][j] = 0; ExImageG[i][j] = 0; ExImageB[i][j] = 0; 見つけたときの処理 } else { 画素を黒色にする ExImageR[i][j] = 255; ExImageG[i][j] = 255; ExImageB[i][j] = 255; } 画素を白色にする } }

ファイルへのデータの書き出し /* ファイルへの出力 */ f = fopen(outfilename, "w"); fprintf(f, "P6 n"); /* 1 行目 */ fprintf(f, "%d %d n", width, height); /* 2 行目 */ fprintf(f, "255 n"); /* 3 行目 */ for ( i = 0; i < height; i++ ) { for ( j = 0; j < width; j++) { fwrite( &(ExImageR[i][j]), 1, 1, f); fwrite( &(ExImageG[i][j]), 1, 1, f); fwrite( &(ExImageB[i][j]), 1, 1, f); } } fclose(f); } return 0;

6. 今日の練習問題 今日の練習問題の時間は, これまでに出題された C 言語レポート課題に関するプログラム作成, レポート作成に当ててよい

2009/04/17 改 訂 マ ルチ デ ィス プレ イ に つ い て 教育支援事業室 藤村 直美 Mac は外部ディスプレイが接続されていると 内蔵ディスプレイと外部ディスプレイをそれ ぞれ別の表示装置として使えます これは便利ですが 時として問題を引き起こすことがあり ます ここでは Mac Book の内蔵ディスプレイ(1280 800)と外部ディスプレイ 1440 900 が接続されている場合を例に問題点と対応策を説明します マルチディスプレイになると 例えば図1が内蔵ディスプレイ 図2が外部ディスプレイの ような表示になります つまり外部ディスプレイがプロジェクタの場合には授業で説明をしよ うとしている内容は内蔵ディスプレイには表示されますが 外部ディスプレイには何も表示さ れていない状態になります 図1 図2 内蔵ディスプレイの表示例 外部ディスプレイ プロジェクタなど 授業で画面を受講者に見せたい時にはこれは困るので 内蔵ディスプレイと外部ディスプレ イに同じ内容を表示するには次のようにします

(1) (2) (3)

(3) Mac Mac Mac

1024 768 60Hz

参考 Mac では二つディスプレイが接続されていると それぞれの解像度を別に設定することがで きます 次に図8に内蔵ディスプレイ 図9に外部ディスプレイの解像度を設定する画面を同 時に表示した例を示します 図8 内蔵ディスプレイの解像度設定 図9 外部ディスプレイの解像度設定

WebCT 1. http://webct.kyushu-u.ac.jp/ Web Login Safari

SSO-KID SSO-KID

2. V

HTML

3.

4.

CSV UTF-8 Excel Numbers Windows Excel 5.

[ (1) (2) (3)