基于Straigtness将轮廓分裂成子轮廓

时间:2015-12-25 06:42:42

标签: python opencv image-processing computer-vision

我有一个程序可以获取图像的轮廓。我想基于相对平直度将这些轮廓分解为子轮廓。如果额外像素的直线度小于阈值乘以先前的直线度,则应该分割轮廓。当我绘制一个用油漆绘制的正方形图像时,程序输出应为4个子轮廓。然而,出于某种原因,我得到3个子轮廓,其中2个包括2-3个点,其中一个包括大部分原始轮廓。请注意,我的代码中的0.85是来自研究论文的阈值。 dPreious是边缘的像素距离(不包括当前像素)。 v是终点之间的欧氏距离。

def split(contour):
new = [];
toAdd = [];
sCurrent = 0.0
sPrevious = 0.0
v = 0.0
dPrevious = 1
for points in range(0,len(contour)):
    currentX = float(contour[points][0])
    currentY = float(contour[points][1])
    if points != 0:
        v = math.sqrt(math.pow(float(toAdd[0][0])-currentX,2) + math.pow(float(toAdd[0][1])-currentY,2)) 
        dPrevious = len(toAdd)
    sCurrent = v/dPrevious
    if sCurrent < 0.85*sPrevious:
        new.append(toAdd)
        toAdd = []
    toAdd.append(contour[points])
    sPrevious = sCurrent
new.append(toAdd)
return new

1 个答案:

答案 0 :(得分:0)

如果使用OpenCV查找轮廓,可以使用cv2.approxPolyDP()函数的功能为您完成工作: cv2.approxPolyDP。您可能必须尝试使用​​epsilon参数才能获得成功。