2012-11-28 31 views
2

我使用OpenCV 2.4(C++)在灰度圖像上進行線條查找。這涉及一些基本的圖像處理步驟,如模糊,閾值,Canny邊緣檢測器,梯度濾波器或Hough變換。我必須在數千幅圖像上應用線條查找算法。加速OpenCV

考慮到大量圖像,有沒有辦法加速計算?

下列其中一項提供幫助嗎?英特爾TBB,IPP或OpenCV GPU? 我聽說OpenCV GPU可以加速計算,但數據傳輸速度很慢。所以在這裏使用GPU可能不是正確的選擇?

謝謝!

編輯:

是否有使用parallel_for時從TBB,以加快圖像處理任何意義嗎?如果我使用如下循環:

for(int i=0; i<image_location.size();++i) 
{ 
Mat img=imread(image_location[i]); 
blur(img...); 
threshold(img...); 
... 
} 

我可以通過使用parallel_for來改善性能嗎?任何人都可以提供如何使用parallel_for包含一些opencv操作的例子嗎?

回答

1

問題的範圍實際上是無限的。

首先,您是否衡量了應用程序的性能以檢測實際的瓶頸?我的猜測是霍夫變換,但誰知道你的代碼在做什麼。現在,如果霍夫變換是一個緩慢的部分,並假設OpenCV具有快速實現它,那麼這就是我告訴你這個問題有問題的原因。當你決定增加你已經很多的圖像時,改變一下稍微好一點的實現並沒有多大幫助,問題在於方法本身。

你真的需要使用霍夫嗎?也許你可以使用形態操作符來獲得類似/更好的效果?來自一些常見域的圖像?你能包括他們的例子嗎?等等

+0

沒有任何處理大量圖像的典型方法嗎?我沒有尋找一個解決方案,加快計算幾個毫秒每個圖像。我想知道是否有一個加速計算的方法可能是兩次或更多。目前我不需要任何代碼示例,但是你們如何看待gpu,ipp,tbb等大量圖像問題?由於我的圖像處理代碼是相對基本的,並不認爲代碼本身是問題,但大量的圖像。 – marc

+0

一個處理大量圖像的典型方法可能是大量採樣,但這似乎不適合您的情況。另一個將是投入更多的計算能力。此外,我不明白爲什麼你說你的代碼是相對基本的,每個OpenCV代碼行可能意味着很多處理。我看過論文描述移植到GPU時的巨大改進,但最終當您從數千張圖片移動到數百萬張圖片時,您遇到了同樣的問題。 – mmgp