numpy 我想计算自由曲线的每个弯曲位置的Angular

ej83mcc0  于 12个月前  发布在  Angular
关注(0)|答案(1)|浏览(99)

注意:这是一条自由曲线,但不是直线或折线,所以它可以更复杂。
我想计算的Angular (度)的自由曲线线上的每一个弯曲的立场,并希望显示曲线是大于45,小于45度。
它是用np.arccos()方法计算两条连续曲线之间的夹角。

....
largest_contour = max(filter_coontour, key=cv2.contourArea)

    # Simplify the curve using the Ramer-Douglas-Peucker algorithm
epsilon = 0.001 * cv2.arcLength(largest_contour, True)
 simplified_curve = cv2.approxPolyDP(largest_contour, epsilon, True)

    # Get the coordinates of the points along the simplified curve
curve_points = simplified_curve.reshape(-1, 2)

for i in range(1, len(curve_points)):
     vector = curve_points[i] - curve_points[i - 1]
     if prev_vector is not None:
           dot = np.dot(vector, prev_vector)
           norm = np.linalg.norm(vector) * np.linalg.norm(prev_vector)       
           angle = np.arccos(dot / norm) * 180 / np.pi
      print("angle", angle)
....

上面是我的代码,但它没有给我准确的Angular 值。请参阅所附的图像

zxlwwiss

zxlwwiss1#

如果使用Douglas-Peucker(或其他类似方法)简化曲线,则会引入像拉直段和更尖锐的方向变化这样的伪影。相反,您可能更喜欢使用稍微柔化形状的任何方法(例如模糊和阈值)。
X1 E0 F1 X描述了一种用于测量非手工绘制的曲线的局部属性(如Angular 和曲率)的方法。
基本上,使用三个相邻像素可以计算密切圆,从中可以导出局部笔划Angular 和曲率。
这三个像素不应该是连续的,否则你会得到一组有限的可能值。它们应该由2个或更多像素分隔,具体取决于您的分辨率。例如,您可以计算像素(0,3,6)的结果,将结果与像素3关联,然后计算(1,4,7)、(2,5,8)、.
我希望这能帮上忙。

相关问题