2011-03-30 50 views
0

我有位圖圖像像14000x18000(〜30MB)的高度和寬度。我正在嘗試使用不同的圖像處理庫(OpenCV(使用封裝OpenCvSharp),Aforge.NET ..)處理它們以便進行斑點檢測。但是,標記位圖圖像會導致內存分配問題。庫嘗試將標記的圖像映射到32位圖像。大塊位圖圖像內存分配blob檢測,C#.Net

有沒有一種方法可以用少量的內存來完成標籤操作? (裁剪圖像不是解決方案)

例如,將位圖圖像標記爲8位圖像而不是32位?

回答

1

如果沒有對8位的事情的答案......即使有...

對速度和內存的目的,我會強烈建議調整縮小圖片(不裁剪)。使用像this sample does這樣的高質量插值,只調整到50%,而不是縮略圖(7.5MB im memory)。

你沒有提到你不想這樣做,我假設你可能不想嘗試它,認爲圖書館會在全分辨率下做更好的斑點檢測。在您創作想法之前,您需要測試的樣本圖像的全分辨率小節,該小節的大小與圖書館處理的大小相比,相同的小節爲50%。

除非你真的這樣做了,否則你無法知道。您還可以計算圖片可以使用的最大內存量,計算調整大小因子以定位該數字(爲了安全起見將其降低 - 當測試中出現問題時您會計算出此數值)。如果您關心原始圖像中的東西,請按比例縮小它的大小。

+0

我想分配1GB內存和c#給異常「分配失敗..字節」,但我有8GB的內存。我如何允許它使用需要的? – cerezza 2011-03-31 12:45:40

+0

@cerezza - 複雜而令人心碎的問題!最重要的是,.NET並不總是儘可能多地分配,不知道爲什麼。關於[這個線程]的一些見解(http://stackoverflow.com/questions/2985408/net-out-of-memory-troubleshooting)。在.net中分配大量內存是一個單獨的問題,需要大量的搜索。 – FastAl 2011-03-31 14:03:00

0

這可能無法解決您的特定問題(或可能),但是您是否已考慮將幀分割/分割成2x2(或3x3)矩陣,並嘗試分別對它們分別進行處理。然後根據您在4(或9)幀中找到斑點的位置,關聯併合並相鄰斑點以形成單個斑點。當然,這種高級別的blob合併必須是您自己的邏輯。

PS>無可否認,通過對Aforge的很膚淺的瞭解,沒有任何實際操作經驗。