2012-04-24 120 views
4

我嘗試通過來自OpenCV的MSER檢測來查找圖像上的對象。但功能cvExtractMSER回報並不輪廓,但設定點(CvSeq),創造數字:在OpenCV中查找一組點的輪廓

(1, 4), (2, 3), (2, 4), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4), ... 

Area created by set of points

但我只需要輪廓的點:

(1, 4), (8, 4), (8, 1), (4, 1) 

Highlight needed contour points

我如何找到這個輪廓?

我認爲,最簡單的(但不是最快)的方法是:

  • 平局B/W的所有點圖像(如何逐點?)
  • 使用findContours爲找到輪廓在新圖像上
+1

它已經2年,所以你可能已經有解決你的問題。我遇到了同樣的問題。因此,我認爲描述MSER返回「輪廓」的OpenCV文檔是不正確的: 「//在指定圖像上運行提取器;返回MSER, //每個編碼爲輪廓(向量,請參閱findContours) //可選掩碼標記搜索MSER的區域(...)「 – 2014-04-16 20:58:57

回答

0

如果我的理解正確,您正在尋找檢測到的物體的角落。

您可以遍歷您的countours列表並編寫簡單的邏輯,通過簡單的座標比較來檢測4個角

+1

我認爲這不是很好的答案。如果他有不同的形狀,需要更多的角來製作輪廓呢?簡單的邏輯變得不容易寫。 – krzych 2012-04-26 08:56:59

+0

也許karlphillip可能意味着說凸包? – rwong 2014-03-04 13:17:05

1

findContours()中的一個選項是傳遞一個參數,該參數將除去直線水平,垂直或對角線上的端點以外的所有點。如果您創建圖像並繪製您列出的點,則findContours()可以爲您完成剩下的工作。

CV_CHAIN_APPROX_SIMPLE壓縮水平,垂直和對角線段,只留下它們的端點。例如,一個直立的矩形輪廓用4個點編碼。

http://opencv.itseez.com/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours

+0

「創建一個圖像並畫出你列出的點,然後findContours()可以完成剩下的工作」 是的,我認爲這是最簡單的方法(我在帖子底部寫了它)。但我不知道在圖像上繪製點序列的快速方式。你可以幫我嗎? – 2012-05-07 19:31:59