如何区分具有锯齿状,不规则边缘的轮廓和具有平滑边缘的轮廓?

时间:2018-06-25 17:00:10

标签: opencv

此字段包含一些阈值操作产生的轮廓,这些轮廓具有高度不规则的锯齿状边缘:

enter image description here

此处已满:

enter image description here

目前,我想出的最好的方法是通过点密度来区分这些轮廓与较平滑的轮廓。在下面的示例中,如果有许多点定义了一个相对较小的区域,则将消除形状:

using OpenCvSharp;

//...

const double POINTS_PER_AREA = 2.0;
var cleanedContours = new List<List<Point>>();
var area = Cv2.ContourArea(shape);
foreach (var shape in contours)
{
    if (area / shape.Count > POINTS_PER_AREA)
        cleanedContours.Add(shape.ToList());
}

尽管我对这种方法不是很满意,因为它经常返回假阳性并依赖于主观常数。有更好的方法吗?

0 个答案:

没有答案