2012-04-05 73 views
1

使用OpenCV,可以在框架中存在多個感興趣區域的情況下執行博客檢測嗎?使用OpenCV在單個圖像/幀中的多個ROI中進行斑點檢測 - 有可能嗎?

我一直在閱讀基於1.x'C'API的'學習OpenCV'書,並且我意識到IplImage中的ROI信息可以作爲單個ROI使用,因此所有操作都會假設一個ROI。這是否意味着我無法使用多個投資回報率?

我對多重投資回報的要求源於減少處理的慾望,而我確信我所感興趣的斑點大概只佔整個圖像區域的30-40%,分成3-4個區域。在整個圖像上運行意味着處理能力/時間方面的開銷爲60-70%。或者,我在這裏錯過了一些非常基本的東西?

編輯:

上找到SA this問題,看起來像這可能是一種方法。如果我理解正確,我可以在整個框架中使用一個掩碼,揭露多個ROI,但不能在IplImage中使用ROI本身。是對的嗎 ?此外,這是否符合我減少處理要求的目的,這是我使用投資回報率的主要目標?

+0

我認爲使用mask可以解決你的問題。然而,大多數算法迭代通過掩碼來檢查某個像素是否被屏蔽,處理時間是否縮短取決於您正在執行的操作類型。一個問題,爲什麼不一次只執行一次投資回報率,並且乘以倍數? – cxyzs7 2012-04-05 17:14:42

+0

感謝您花時間回答@ cxyzs7。你的意思是先將幀分成多個(比如ROI大小)子幀,然後分別處理每個子幀?或者,在每一幀中,每次執行4次操作設置不同的ROI?如果它是後者,看起來可行並且相當優雅,但不知何故,我的印象是你設置了一次投資回報率......這可能是我的錯誤解讀。 – icarus74 2012-04-06 18:19:15

+1

我的意思是後面的,這很簡單。您可以設置ROI乘法時間。 – cxyzs7 2012-04-06 20:45:01

回答

1

就您而言,我認爲您可以一次設置一個投資回報率,併爲每個投資回報率執行您的斑點檢測。記住結果座標位於子圖像空間中,您可能需要將它們轉換回原始圖像空間。有一件事我個人發現有幫助:通常ROI不是連續記憶,如果ROI的大小與原始圖像相比非常小,則將ROI複製爲另一張圖像並在單張圖像上運行算法可能會更快,因爲例如:

for (int i = 0;i < numRects; ++i) { 
    cv::Mat subImg = img(rects[i]).clone(); 
    blobDetection(subImg); 
} 

希望這會有所幫助。

+0

非常好。我當然會試試看,並試圖找出我正在加速的那種。 – icarus74 2012-04-07 09:16:31