左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]

Slides:



Advertisements
Similar presentations
プログラミング演習Ⅱ 課題 4 第 2 週 画像ファイル (ppm) の読み書き 画像データ用のメモリ確保・解放 1.
Advertisements

1 データ構造とアルゴリズム 第 3 回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
1 全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える 処理後のデータを出力ファイルに書き出す 画像データ用に確保したメモリを解放.
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
16.3 関数と構造体 構造体ポインタ 地底探査ゲーム
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
ファイル操作と文字列の利用.
情報処理Ⅱ 第4回 2007年10月29日(月).
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
プログラミング 3 構造体(1).
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
iioLoadFile()とiioMallocImageBuffer()の補足
プログラミング 4 記憶の割り付け.
画像処理プログラムの説明.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
プログラミング 3 構造体(2).
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング演習Ⅱ 課題4第3週 画像処理 (1) ビット演算子.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
型の compatibility とポインタ演算
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
構造体と共用体.
データ構造とアルゴリズム 第11回 リスト構造(1)
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
11: 動的メモリ確保 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
ポインタとポインタを用いた関数定義.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
プログラミング論 ポインタ
アルゴリズムとデータ構造1 2009年6月15日
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
ネットワーク・プログラミング Cプログラミングの基礎.
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング論 構造体
情報処理Ⅱ 2005年10月28日(金).
プログラミング演習Ⅱ 課題4第4週 画像処理 (2) 応用.
ドキュメントジェネレータ 詳細仕様 長谷川啓
アルゴリズムとデータ構造 2010年6月17日
11: 動的メモリ確保 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
プログラミング演習II 2003年12月10日(第7回) 木村巌.
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
情報処理Ⅱ 小テスト 2005年2月1日(火).
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
情報処理Ⅱ 2006年10月27日(金).
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
Presentation transcript:

左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]

ビットシフトとビット反転 例 1ビット右シフト 11101100 → 01110110 ビット反転 11101100 → 00010011 1ビット右シフト 11101100 → 01110110 ビット反転    11101100 → 00010011 RGBそれぞれを処理することを忘れないこと ビット反転 ビットシフト

モノクローム画像化 例 R 100 G 150 B 125 平均値 125 R 125 G 125 B 125

縮小と拡大 ½に縮小 2倍に拡大 例 ½に縮小 10 30 50 12 31 50 11 31 50 11 31 45 11 32 55 10 30 50 10 30 50 12 50 31 12 50 31 2倍に拡大 10 30 50 10 30 50 12 50 31 12 50 31 11 31 45 11 31 45 11 55 32 11 55 32 11 31 45 11 31 45 11 55 32 11 55 32

モザイク化 例:2×2画素の平均値で置きかえる ※ブロックを大きくするほど粗い画像になる モザイク 10 30 50 12 31 11 45 55 32 11 31 50 モザイク ※ブロックを大きくするほど粗い画像になる

~ポインタの復習(再掲)~ ポインタ型変数宣言の例 int n;   int *ptr;   n = 50; ptr = &n; ← ptrは int型の変数を指すポインタ変数 ← ptrに n のアドレスを代入 アドレス演算子(単項&演算子, &operator) データが格納されているアドレスを返す演算子 ptr n 104番地 104番地 : 50

間接演算子 この“*”は間接演算子(indirect operator) int n; int *ptr; n = 50; 70 80番地 : 104番地 104番地 : 50

PIXEL構造体 88 B1 E7 ?番地 px 200番地 x typedef struct{ unsigned char r; unsigned char g; unsigned char b; } PIXEL, *PPIXEL; int main(void){ //例 PIXEL  x; PPIXEL px = &x; ... } ?番地 px  200番地 200番地 x r 88 g B1 E7 b

アロー演算子 -> 88 B1 E7 pxが指しているPIXEL構造体のrの値を変えたい (*px).r = 5; 正しい アロー演算子 -> pxが指しているPIXEL構造体のrの値を変えたい (*px).r = 5; 正しい *px.r = 5; 正しくない    (*(px.r) = 5と解釈される) px -> r = 5 この“*”は間接演算子 ポインタ変数の宣言と混同しない! px 5 x r 88 g B1 E7 b

各データの参照方法(1) pImage->xsize pImage xsize 256 この行の先頭アドレスは ysize 192 void ipRotateImage(IMAGE *pImage); pImage->xsize pImage xsize 256 この行の先頭アドレスは pImage->pBuffer[0] ysize 192 level 255 pBuffer → i pBuffer[0] pBuffer[1] このポインタの配列の 先頭アドレスは pImage->pBuffer ↓ j

各データの参照方法(2) この1画素は pImage->pBuffer[1][3] この1画素のR成分は pImage IMAGE *pImage pImage xsize 256 ysize 192 level 255 構造体の メンバ参照演算子 pBuffer → i pBuffer[0] pBuffer[1] ↓ j pBuffer[ysize-1]

参考 データ構造がこうなっているとき R成分の値を参照するには… pImage->pBuffer[0][0]->r 違いを味わって欲しい… IMAGE *pImage pImage xsize 256 ysize 192 level 255 pBuffer → i pBuffer[0] pBuffer[1] ↓ j pBuffer[ysize-1]