2016-06-09 41 views
-1

我正在尋找一種方法在手繪草圖中查找筆畫。我的實際做法是應用自適應閾值並從OpenCV中找到Contours。與此相關的問題是,findContours爲我提供了右手邊和左手邊,即單個筆畫的上部和下部輪廓。是否有任何方法可以從手繪筆劃中導出一個輪廓表示?草圖中的線條檢測

預先感謝

被修改:

下面是代碼和的我所迄今所取得的圖像:

首先我施加自適應閾值化到初始圖像:

Imgproc.GaussianBlur(image, image, new Size(5, 5), 3); 
Mat thresholded = Mat.zeros(image.size(), CvType.CV_8U); 

然後,我在閾值圖像上應用findCountours,並在每個輪廓上添加approxPolyDB。

Imgproc.findContours(thresholded, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0,0)); 

List<MatOfPoint> refinedContours = new ArrayList<MatOfPoint>(); 
for (int i = 0; i < contours.size(); i++) { 
    MatOfPoint2f approx = new MatOfPoint2f(); 
    Imgproc.approxPolyDP(mop2mop2f(contours.get(i)), approx, 6, true); 
} 

然後我在每個輪廓的角度大於一個固定的閾值的點上分割每個輪廓。作爲最後一步,我刪除了所有不超過給定閾值的輪廓。

In the picture you can see the thresholded image as the final contours

我的目標是避免平行輪廓的方式,存在用於繪製圖像中一個衝程只有一個輪廓。

謝謝

+6

你可以發佈你的代碼和樣本圖像? – Berriel

回答

0

輪廓查找器用於查找輪廓。如果你對我們所說的某種厚度的身體的輪廓感興趣,這就是唯一的意義。 您對線條感興趣。如果您在粗線上應用輪廓搜索器,則最終會出現2行而不是1行,這會爲您提供更多數據來處理。

我建議你嘗試一種細化算法。使用合適的閾值對圖像進行二值化處理,然後應用細化/骨架化算法。

如果需要,您可以使用形態閉合來填充一些細縫。

使用修剪算法來清理你的骨架。

閱讀: http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm

+0

謝謝你的回答。我實施了某種細化,它的功能就像是一種魅力,但是您是否有任何想法來獲取像findCountours對等高線所做的細化線的表示? – mapeza

+0

如果您的意思是findContours返回的點向量,則只需使用線條像素作爲座標。如果你正確地減薄你的線,那麼它的厚度將會是1,所以它非常直線。當然,如果你的意思是有無數的數學方法來提取這些結構的特徵。 – Piglet