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

2024-05-29 02:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

如果有人能帮我或提供你的想法,那将是有用的。 如果我的问题不是很精确或是很大,请让我知道


Tags: 对象方法图像pyramidflowopencvpointsusing
2条回答

若要获取边界框,请围绕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可能会给你第一个想法。在

您可以通过遍历集群标签来获得最小和最大的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) 

相关问题 更多 >

    热门问题