刘虾 2025-09-23 15:06 采纳率: 49.4%
浏览 10
已结题

python将目标识别的框分组

python将目标识别的框分组,按y轴和x轴分组,将第一行左边3个作为一个分组,第一行右边两个作为一个分组,中间两个作为一个分组,左下角作为一个分组
原图

img


要求

img

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-09-23 15:06
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    基于你的要求,大致可以实现如下:

    目标识别框分组算法

    由于你提供的信息比较模糊,但是我们可以尝试使用以下方法:

    1. 使用 OpenCV 的 findContours 函数将图像中的每个目标识别框识别出来。
    2. 使用 numpy 库创建一个二维数组,用于存储框的信息,例如中心坐标、宽度、高度等。
    3. 使用 scipy 库中的 sort 函数对框按 y 轴坐标进行排序,得到一个按照 y 轴排序的数组。
    4. 根据你的要求,将第一行左边 3 个框作为一个分组,第一行右边 2 个框作为一个分组,中间 2 个框作为一个分组,左下角作为一个分组。
    5. 使用 matplotlib 库绘制分组后的结果。

    以下是核心代码:

    import cv2
    import numpy as np
    from scipy import sort
    import matplotlib.pyplot as plt
    
    # 从 OpenCV 中读取图像
    img = cv2.imread('原图.jpg')
    
    # 使用 findContours 将目标识别框识别出来
    contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 创建一个二维数组存储框的信息
    boxes = np.zeros((len(contours), 4))
    
    # 对框进行排序,按照 y 轴坐标
    y_sorted_contours = sort.cenums(contours, key=lambda x:cv2.boundingRect(x)[1])
    
    # 基于你提供的要求,将框分组
    groups = []
    left_groups = y_sorted_contours[:3]
    right_groups = y_sorted_contours[3:5]
    mid_groups = y_sorted_contours[5:7]
    bottom_left = y_sorted_contours[-1:]
    groups.extend([left_groups, right_groups, mid_groups, bottom_left])
    
    # 使用 Matplotlib 绘制分组后的结果
    for i, group in enumerate(groups):
        for box in group:
            x, y, w, h = cv2.boundingRect(box)
            cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
        plt.subplot(1, 4, i+1)
        plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
        plt.title(f'Group {i+1}')
        plt.axis('off')
    
    plt.show()
    

    请注意,这个代码只是大致实现了分组的目标,可能需要根据具体的图像调整参数。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月23日
  • 创建了问题 9月23日