草图中的线检测

时间:2016-06-09 10:50:34

标签: algorithm opencv computer-vision

我正在寻找一种在手绘草图中找到笔画的方法。我的实际方法是从OpenCV应用自适应阈值和findContours。这个问题是findContours给了我右手边和左手边,一个笔划的上下轮廓。有没有办法从手绘笔画中推导出一个轮廓表示?

提前致谢

编辑:

这是我到目前为止所取得的代码和图像:

首先,我将自适应阈值处理应用于初始图像:

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

然后我在阈值图像上应用了findCountours,并在每个轮廓上添加了aboutPolyDB。

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

我的目标是避免平行轮廓,使得草绘图像中只有一个轮廓用于一个笔划。

由于

1 个答案:

答案 0 :(得分:0)

轮廓查找器用于查找轮廓。只有当你对一些厚度的身体感兴趣时,这才有意义。 你对行感兴趣。如果在粗线上应用轮廓查找器,最终会有2行而不是1行,这样可以提供更多数据来处理。

我建议您尝试使用细化算法。使用合适的阈值对图像进行二值化,然后应用细化/骨架化算法。

如果需要,您可以使用形态学闭合来填补一些小的间隙。

使用修剪算法来清理骨骼。

阅读本文: http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm