這學期選了一門還不錯的課,數位影像處理。
從很久以前就對這一方面還滿有興趣,但一直沒有時間去好好的瞭解
就趁著系上剛好有開這門課,當作一個學習的動力
(說沒時間是假的,明明就是愛找藉口#$%$#@)
接下來就來一個小程式,數位負片處理 :D
在開始程式之前稍微介紹一下,數位影像的概念
通常一張全彩的影像,包含了RGB共3Byte
而每一顏色使用1Byte表示之
其亮暗程度可分為0~255,0最暗255最亮
相信到這邊,都不難理解,接下來就可以進入主題『數位負片影像處理』
數位負片顧名思義就是,亮變暗而暗變亮
因此處理方式如下↓
負片值 = 255 - 原始影像
255 = 255 - 0
0 = 255 - 255
30 = 255 - 225
上述範例,不難看出最亮變成最暗,最暗變成最亮
只要將影像上的每一點,經過這樣的處理就能得到負片效果
以下就來看看實際處理後的效果
[原始影像]
[全彩負片]
雖然這個程式非常的簡單,不過至少是認識數位影像處理的第一步!!
2009年3月26日 星期四
數位影像負片處理
C語言監控IO
最近在寫R232的連線程式,一開始的做法是使用timer定期去抓buffer裡的資料
但由於程式要求的資料量不大,此方法會造成cpu無謂的loading
但最近再翻GTK時,突然發現一個好用的函式如下↓
gint gdk_input_add( gint source,GdkInputCondition condition,
GdkInputFunction function, gpointer data);
這個函式可以監控IO當資料有所進出時,可執行自訂函數。
參數1: source 即為檔案描述器
參數2: condition 為要監控的模式
GDK_INPUT_READ 當檔案描述器有資料可供讀取時,則執行自訂函數
GDK_INPUT_WRITE 當檔案描述器已準備好可寫入時,則執行自訂函數
參數3: function 自訂函數名稱
參數4: 傳入自訂函式之參數
回傳值: 傳回一個標籤tag,可用此標籤移除對IO的監控如下↓
void gdk_input_remove(gint tag);
自訂函式宣告格式:
void input_callback( gpointer data,
gint source,
GdkInputCondition condition );
原先使用timer方式讀取IO,CPU的負載平均30~40%左右
使用此方法負載確只有20%,很明顯此方式可有效降低負載。 :)
訂閱:
文章 (Atom)