gpt4 book ai didi

Python:检测到运动周围的重叠框

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:59 25 4
gpt4 key购买 nike

我目前正在做一个运动检测项目,该项目检测运动并在运动周围绘制一个红色边界框。现在我的程序确实检测运动并在运动周围绘制一个边界框,但也有很多重叠的边界框和正确的边界框。有什么办法可以减少到只有一个盒子吗?

这是我的代码:

    for c in cnts:
if cv2.contourArea(c) < 500:
continue

(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(frame, (x,y), (x + w, y + h), (0, 0, 255), 2)

这是目前的结果(网上找的这张图也是一样的问题): enter image description here

最佳答案

要在最终结果中只显示一个边界框,您必须先保存原始图像。然后,每次绘制边界框时,都必须将其绘制在原始原始图像的副本上,并将绘制的新图像保存为结果。

我假设您正在使用一个循环,并且在这个循环内您在图像上绘制边界框,但每次都在相同的图像变量上绘制,从而导致多个可见的边界框。如果这是一个不正确的假设,那么请在您的问题中进行澄清,提供更多代码,并提供当前的输出示例以及可见的错误,以及所需结果的示例。

如果您只想要描述运动的最新框,则无需担心以下算法。

组矩形()

openCV 中有一个内置函数,可以将彼此靠近且形状和大小相似的矩形分组,称为 groupRectangles()。 .它将返回由彼此靠近的组合矩形产生的矩形列表。对于不同版本的 openCV ( 3.0 beta docs of groupRectangles() ),即使不完全相同,也应该有类似的功能。

算法编写简单:

作为hinted by @pypypy在对你的问题的评论中,如果重新绘制的框太小并且没有显示你想要的运动区域,那么你可以做一个简单的算法来组合它们。但是,由于边界框未描绘小运动,因此取两个框中较大的一个可能不是您想要的(您需要通过示例阐明您想要的输出)。

有一种简单的算法可以组合边界框,这样您的边界框就会覆盖新边界框和前一个边界框的总面积。该算法涉及从两个框中获取所有 x 和 y 值的最大值和最小值,然后根据这些 x 和 y 值将新框绘制到原始原始图像的副本上。这将创建一个包围所有当前和先前运动区域的边界框。

关于Python:检测到运动周围的重叠框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45299447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com