OpenCV Python创建边界框或围绕分散点围绕圆/多边形

时间:2017-10-26 12:43:46

标签: python opencv image-processing

我正在使用OpenCV Python在小型四边形上进行对象检测以避免碰撞。首先,我需要使用Optical Flow Pyramid (LK)(OpenCV)方法检测对象。我能够跟踪图像ROI上的点,如图像 points tracked using opticalflow lk pyr

所示

我需要创建一个边界框或包围convexHull或某个多边形,如下所示,以显示这些是检测到的对象red lines are which I drew 。忽略孤立点,只能采取彼此相距一定距离的点。

如果有人可以帮助我或向我提供你的想法,那将是有用的。 如果我的问题不准确或广泛,请告诉我

3 个答案:

答案 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)

问题涉及两个步骤:

  1. 您需要对关键点执行集群。我建议您看看scikit-learn clustering
  2. 在每个群集上构建边界矩形或任何其他类型的凸包络。为此,open CV提供了函数BoundingRectlink to the documentation),该函数提供了所需的功能:该函数计算并返回指定点集的最小直角矩形。 / em>