2012-07-05 60 views
10

在HoughCircles函數中,OpenCV中的HoughLines或HoughLinesP函數是否按累加器順序返回行列表?我想知道線的順序。獲得線路的累加器值也非常方便,因此可以使用智能和自適應閾值而不是固定值。沒有rewriting OpenCV myself,訂購或累加器價值是否可用?OpenCV Hough最強線

+1

好的。我一直認爲線條是按順序排列的。而這個假設到目前爲止與我的結果是一致的......但是,確實如此。 – 2012-07-05 22:57:27

回答

11

HoughTransform訂單行按票數降序排列。您可以看到代碼here

但是,投票計數丟失,因爲函數返回 - 唯一的方法是修改OpenCV。

好消息是,這不是很複雜 - 我自己做過一次。將輸出從vector<Vec2f>更改爲vector<Vec3f>並用投票計數填充最後一個參數需要幾分鐘的時間。

此外,你必須修改CvLinePolar添加第三個參數 - 霍夫在C實現,並有包裝在它在C++,所以你要修改這兩個實施和包裝。

主要的代碼來修改是在這裏

for(i = 0; i < linesMax; i++) 
{ 
     CvLinePolar line; 
     int idx = sort_buf[i]; 
     int n = cvFloor(idx*scale) - 1; 
     int r = idx - (n+1)*(numrho+2) - 1; 
     line.rho = (r - (numrho - 1)*0.5f) * rho; 
     line.angle = n * theta; 

     // add this line, and a field voteCount to CvLinePolar 
     // DO NOT FORGET TO MODIFY THE C++ WRAPPER 
     line.voteCount = accum[idx];   

     cvSeqPush(lines, &line); 
} 
+0

謝謝你明確指出我的代碼。我正在使用概率版本,並通過代碼,這將是很好的帶來linesMax太快,以加快速度。 – zzzz 2012-07-06 13:17:08

+1

概率是在同一個文件中,我想你已經找到它了。在線搜索中的不同方法意味着投票計數與古典H中的投票計數不相關。只要一行具有最少的所需投票數,它就被推入結果隊列中。不執行排序。 – Sam 2012-07-06 13:38:02

+0

您好, 對不起,改造這個線程,但你有一個想法hwo獲得累加器價值在probalistic hough變換?我不太確定該線的選票在累積矩陣中的位置。 – Aeefire 2015-03-26 12:42:35