我正在使用OpenCV Python在小型四边形上进行对象检测以避免碰撞。首先,我需要使用Optical Flow Pyramid (LK)
(OpenCV)方法检测对象。我能够跟踪图像ROI上的点,如图像 points tracked using opticalflow lk pyr
我需要创建一个边界框或包围convexHull
或某个多边形,如下所示,以显示这些是检测到的对象red lines are which I drew 。忽略孤立点,只能采取彼此相距一定距离的点。
如果有人可以帮助我或向我提供你的想法,那将是有用的。 如果我的问题不准确或广泛,请告诉我
答案 0 :(得分:1)
通过循环遍历群集标签,您可以获得最小和最大x,y值。然后可以使用每个簇的这4个点绘制矩形。 以下代码可以帮助您。
ret, label, center = cv2.kmeans(Z, 10, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
for i in label.ravel():
x_values = []
y_values = []
count = Z[label.ravel()==i]
for x,y in count:
x_values.append(x)
y_values.append(y)
min_x = min(x_values)
min_y = min(y_values)
max_x = max(x_values)
max_y=max(y_values)
cv2.rectangle(frame, (max_x, max_y), (min_x, min_y), (0, 255, 0), 3)
答案 1 :(得分:0)
要使边界框围绕p1(x_min,y_min)和p2(x_max,y_max)绘制一个矩形,其中x_min / max和y_min / max表示点群集的最小和最大x和y坐标。
因此,当你已经掌握了你的观点时,第一步是形成近点集群并摆脱异常点。
请研究群集分析以了解如何执行此操作。我不愿意在这里写一本书。 https://en.wikipedia.org/wiki/Cluster_analysis可能会给你第一个想法。
答案 2 :(得分:0)
问题涉及两个步骤:
open CV
提供了函数BoundingRect
(link to the documentation),该函数提供了所需的功能:该函数计算并返回指定点集的最小直角矩形。 / em>