c影象處理

2021-03-07 08:20:48 字數 3223 閱讀 7497

1樓:匿名使用者

由於c#託管**中不能使用指標(後來經過我的驗證,即使是在unsafe**中用指標操作,速度仍然很慢),因此我們就不能像c++裡面一樣直接利用指標在記憶體中完成讀寫操作。好在.*** framework提供了託管記憶體與非託管記憶體之間的讀寫功能,乙個強大的marshal類,使得我們快速讀寫影象的畫素資訊成為可能。

在.*** framework 2.0中,bitmap類多了兩個有關記憶體操作的新方法:

lockbits與unlockbits,其具體含義請參見msdn,我在這裡就直接給出利用它們以及marshal類進行記憶體讀寫的**。上面的getrgb方法經過改進之後:

public static bool getrgb(bitmap source, out int[,] r, out int[,] g, out int[,] b)

}return true;

}catch (exception)

}提醒注意的是,這段**僅僅適合於畫素是24位rgb的影象(8位r、8位b和8位g,不包含alpha通道,format24bpprgb),如果要其它畫素格式的(可以參見system.drawing.imaging.

pixelformat的成員),可以此類推,加上一組case語句,成為完整功能的讀圖方法。

回寫則與之相反,把需要寫入的畫素資訊先寫到byte陣列中,再呼叫marshal.copy的第乙個過載方法即可。下面給出我從灰度矩陣構建bitmap類的方法:

////// 由灰度矩陣建立位圖

////// 灰度矩陣(取值0~255)

/// 矩陣對應的點陣圖

public static bitmap fromgray(int[,] gray)

system.runtime.interopservices.marshal.copy(pixelvalues, 0, iptr, ibytes);

result.unlockbits(bmpdata);

return result;

}.*** framework的博大精深,需要你我細心品味……

2樓:馮益斌

在c#中實現影象與其畫素矩陣之間的快速轉換 [原創 2007-05-12 14:00:13 ] 發表者: zqustc

終於開始我真正的數字影象研究階段了。

當我大致瀏覽了一下c# 2005速成版的新特性之後,我決定,放棄以前用的.*** framework 1.1平台了。

新的(其實也不新了)平台基於.*** framework 2.0,提供了更多更強大的功能,就比如說我下面提到的快速讀寫方法,就必須使用framework 2.

0中為bitmap類提供的新成員方法。

在c#中,將**讀入是很方便的,image抽象類裡面提供了乙個靜態方法fromfile(),可以直接把指定了路徑與檔名的**載入到image類的各種派生類中,比如:

private void openfile(object sender, eventargs e)

catch (exception ex)}}

其中pbshow是我定義在窗體上的乙個picturebox。

當我們進行數字影象處理的時候,一般都是基於影象的rgb矩陣、灰度矩陣、yuv矩陣等數學模型來做的。也就是說我們處理的物件是乙個數字矩陣,在c#中一般也是用二維陣列來存放的,這就需要我們事先將bitmap類中存放的影象資訊轉而用陣列來表示。進行完處理之後,再將陣列形式的影象資訊還原成標準影象格式的資訊(位圖、jpeg)。

原先我的做法是用bitmap.getpixel方法,逐個畫素地取出畫素的顏色值,然後存入陣列裡,就像:

public static bool getrgb(bitmap source, out int[,] r, out int[,] g, out int[,] b)

}return true;

}catch (exception)

}回寫的時候也一樣,用bitmap.setpixel方法逐個畫素的寫入。但是當我實際執行的時候,發現這樣根本不可行,乙個1600x1200的影象進行一次彩色到灰度的轉換竟然需要5分鐘,這是無法忍受的。

究其原因,在於bitmap類提供的這兩個畫素操作方法效率極低,這就迫使我們尋找更快速的方法。

由於c#託管**中不能使用指標(後來經過我的驗證,即使是在unsafe**中用指標操作,速度仍然很慢),因此我們就不能像c++裡面一樣直接利用指標在記憶體中完成讀寫操作。好在.*** framework提供了託管記憶體與非託管記憶體之間的讀寫功能,乙個強大的marshal類,使得我們快速讀寫影象的畫素資訊成為可能。

在.*** framework 2.0中,bitmap類多了兩個有關記憶體操作的新方法:

lockbits與unlockbits,其具體含義請參見msdn,我在這裡就直接給出利用它們以及marshal類進行記憶體讀寫的**。上面的getrgb方法經過改進之後:

public static bool getrgb(bitmap source, out int[,] r, out int[,] g, out int[,] b)

}return true;

}catch (exception)

}提醒注意的是,這段**僅僅適合於畫素是24位rgb的影象(8位r、8位b和8位g,不包含alpha通道,format24bpprgb),如果要其它畫素格式的(可以參見system.drawing.imaging.

pixelformat的成員),可以此類推,加上一組case語句,成為完整功能的讀圖方法。

回寫則與之相反,把需要寫入的畫素資訊先寫到byte陣列中,再呼叫marshal.copy的第乙個過載方法即可。下面給出我從灰度矩陣構建bitmap類的方法:

////// 由灰度矩陣建立位圖

////// 灰度矩陣(取值0~255)

/// 矩陣對應的點陣圖

public static bitmap fromgray(int[,] gray)

system.runtime.interopservices.marshal.copy(pixelvalues, 0, iptr, ibytes);

result.unlockbits(bmpdata);

return result;

}.*** framework的博大精深,需要你我細心品味……

求電子版《c#數字影象處理演算法典型例項》,急求

3樓:風起雪落

什麼書pdf檔都

可以上指令碼之家搜到,這書在:

影象預處理是什麼意思,什麼是影象預處理

影象,將每乙個文字影象分檢出來交給識別模組識別,這一過程稱為影象預處理 什麼是影象預處理 這個問題詳細說起來來還比自較的複雜 簡單的說呢,就是bai解決影象因為天du氣或者拍攝角zhi度等原因造成的影象dao模糊 歪斜或缺損的情況 一般動作有對輸入的灰度影象進行大小歸一化,避免因影象的變形而影響後續...

數字影象處理的意義,在數字影象處理中什麼是影象平滑?什麼是影象銳化

影象處理抄 image processing 用計算機對襲影象進行分析,以達到所需結果的技術。又稱影像處理。基本內容 影象處理一般指數字影象處理。數字影象是指用數字攝像機 掃瞄器等裝置經過取樣和數位化得到的乙個大的二維陣列,該陣列的元素稱為畫素,其值為一整數,稱為灰度值。影象處理技術的主要內容包括影...

matlab影象處理教程,如何學習matlab影象處理技術

文庫精選 內容來自使用者 rob 2011 04 19 11 42fmmu王孜 分類 影象處理軟體 瀏覽39735次 選擇任一256級灰度點陣圖影象,編寫程式實現下述的影象處理操作 一 點陣圖格式影象基本操作1 影象的讀取2 影象的儲存 二 影象的灰度及修正1 對比度展寬 灰度窗方法,a,b位置自選...