2014-02-11 41 views
0

我正在檢測包含正方形圖像的所有區域。我得到含有檢測到的區域的正方形在其四個座標的術語(例如A,B,C,d),如下所示:發送幾個ROI到另一個方法/函數來計算直方圖?

image

檢測區域,其中正方形是本後,我需要創建該地區的直方圖。目前,首先我要爲每個區域創建單獨的圖像,然後將每個圖像發送到getHistogram(Mat detectedSquare);以獲取直方圖。

問題:我的應用程序的計算時間非常非常高,所以我想找到一些方法可以跳過爲每個區域創建單獨的獨立方塊。

我想要做什麼:要直接爲每個區域創建直方圖,而不爲其創建圖像。

Currenlty我爲每個區域創建單獨的圖像如下,我想擺脫它:

Mat detectedSquare; 
detectedSquare.create(rows, cols, CV_8UC3); 
Rect regionOfInterest = Rect (min_x,min_y, rows, cols); 
detectedSquare= original_Image(regionOfInterest); 

getHistogram(Mat detectedSquare); 
+0

從一個區域創建圖像需要多長時間?那裏的工作量最多的就是一堆memcpy調用。 –

+0

此外,也許[這篇文章](http://stackoverflow.com/questions/7041181/equivalent-to-cvsetimageroi-in-the-opencv-c-interface)可以幫助,設置圖像的投資回報率。 –

+0

@ChrisO:目前,我正在做同樣的事情,這是目前在你給的鏈接...但計算時間是非常高的我的應用程序....我的實際應用程序是發送這些廣場SVM進行分類。 – skm

回答

2

假設Rect roi是要計算其直方圖圖像Mat mat的子區域,你可以直接調用這樣的:

getHistgram(Mat(mat(Range(roi.y, roi.y+roi.height) 
       , Range(roi.x, roi.x+roi.width)))); 

編輯:正如您在以下內容中所評論的,您希望使用多線程加速它。也許最簡單的方法是使用OpenMP

vector<Rect> squares(N); // N square regions 

#pragma omp parallel for 
for (int i=0; i<N; i++) 
{ 
    // ... compute histogram for squares[i] ... 
} 
+0

它也類似於我正在使用的除了單行寫代碼。但是有什麼辦法可以減少計算時間。 – skm

+0

@ user2440724我想你不能如果你的意思是運行時間。無論如何,您必須循環所有像素來計算直方圖。對? – herohuyongtao

+0

是否可以爲「for循環」執行多線程,因爲每個方塊的結果是獨立的。 – skm