我正在尝试避免将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
在此先感谢我的英语。
答案 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
的讨论很多