我正在寻找一种在手绘草图中找到笔画的方法。我的实际方法是从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
我的目标是避免平行轮廓,使得草绘图像中只有一个轮廓用于一个笔划。
由于
答案 0 :(得分:0)
轮廓查找器用于查找轮廓。只有当你对一些厚度的身体感兴趣时,这才有意义。 你对行感兴趣。如果在粗线上应用轮廓查找器,最终会有2行而不是1行,这样可以提供更多数据来处理。
我建议您尝试使用细化算法。使用合适的阈值对图像进行二值化,然后应用细化/骨架化算法。
如果需要,您可以使用形态学闭合来填补一些小的间隙。
使用修剪算法来清理骨骼。