有沒有辦法從輪廓中移除小線段?OpenCV - 如何從輪廓中移除小線段?
例如,在此圖像中,最大的輪廓由綠色指定,它的近似被藍色規定:
由於輪廓是點的集合,我想我們可以做一些東西去除紅色圓圈中的輪廓線段。例如通過檢測和去除小線或小的子輪廓或其他方式。但我不知道我該怎麼做。
請記住我想在找到輪廓後刪除它們,而不是在此之前。你知道我可以如何移除它們嗎?或者有什麼想法?
有沒有辦法從輪廓中移除小線段?OpenCV - 如何從輪廓中移除小線段?
例如,在此圖像中,最大的輪廓由綠色指定,它的近似被藍色規定:
由於輪廓是點的集合,我想我們可以做一些東西去除紅色圓圈中的輪廓線段。例如通過檢測和去除小線或小的子輪廓或其他方式。但我不知道我該怎麼做。
請記住我想在找到輪廓後刪除它們,而不是在此之前。你知道我可以如何移除它們嗎?或者有什麼想法?
我發現contourArea可以很好地去除小的,孤立的輪廓。這個片段說明你可能會對如何進行:
findContours(edges, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
...
// Prune contours
vector<vector<Point> > prunedContours;
for (size_t i = 0; i< contours.size(); i++)
{
if (contourArea(contours[i]) > minArea)
{
prunedContours.push_back(contours[i]);
}
}
如果「循環」或外部輪廓區域是關注的大輪廓的一部分,看看approxPolyDP。可能粗略近似的原始輪廓可以忽略無關特徵。
如果你看到圖片,你可以看到近似也有不需要的線條。 – hasanghaforian 2014-10-10 14:52:47
我假設你已經增加了approxPolyDP的epsilon值?綠色輪廓應該在足夠高的「epsilon」下「退化」爲四邊形多邊形。此外,藍色輪廓似乎在左下角有一個循環。這表明你還沒有按區域修剪你的原始輪廓列表。 – Throwback1986 2014-10-10 15:40:22
我該如何去做就是坐下來寫一張紙,做一個草圖,並在數學上定義這些異常值的條件,例如,在任何一個座標系中跳躍都可以做(在這裏查看你在異常點中有多少點會有幫助)。然後簡單地過濾尖峯。試過這樣的事情? – 2014-10-10 14:46:01
你是如何解決它的? – tobes 2015-02-27 14:12:58
@tobes我無法以常規方式刪除它們,我嘗試通過'grabcut'找到前景,然後查找它的輪廓。 – hasanghaforian 2015-02-27 18:52:28