arcLength函数(不带OpenCv)

时间:2018-08-09 22:00:01

标签: python scikit-image cv2

我正在尝试避免将CV2用于工作场合。我正在使用skimage.measure.find_contours。但是我在任何地方都找不到CV2 arcLength函数。

如果没有CV2功能,如何计算轮廓周长或曲线长度。

这是我的代码,以防万一:

from skimage import measure

hresh = get_threshold(image, 127)
contours = measure.find_contours(thresh, 0.8)

for contour in contours:
    approx = aproximate_curve(contour, 0.1 * my_unknown_arc_length_function(contour))  # I have no idea about arc_length_function implementation

在此先感谢我的英语。

2 个答案:

答案 0 :(得分:1)

一开始我也被困在那里,但后来我意识到自己做数学很容易。

以防万一以后有人需要此代码。

import numpy as np

def perimeter(contour):
    assert contour.ndim == 2 and contour.shape[1] == 2, contour.shape
 
    shift_contour = np.roll(contour, 1, axis=0)
    dists = np.sqrt(np.power((contour - shift_contour), 2).sum(axis=1))
    return dists.sum()

答案 1 :(得分:0)

在OpenCV中,arcLength()函数用于查找轮廓/形状对象的周长。可以找到here

在scikit映像中,可以在名为measure的{​​{1}}模块中找到相同的功能。

用法:

perimeter

确保图像为#--- importing the module --- from skimage.measure import perimeter print('Perimeter : {}'.format(perimeter(image))) 数据类型。包含轮廓/形状对象的像素必须具有值float,而其他像素必须具有1.0

关于此功能on this link

的讨论很多