You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python OpenCV识别并标注图像中的大中小尺寸物体?

实现步骤

你已经完成了物体检测和尺寸排序核心逻辑,只需要补充分级规则、可视化标注两步即可实现需求:

  1. 确定尺寸分级规则
    可根据你的使用场景二选一:
  • 自适应比例分级:将已排序的物体列表按占比分段,比如总检测数为n,前20%为大物体、中间30%为中物体、后50%为小物体,可适配不同图像的物体分布
  • 固定阈值分级:提前设定小/中/大对应的面积阈值,比如小于200像素为小、200~1000像素为中、大于1000像素为大,适合固定拍摄距离的标准化场景
  1. 图像标注实现
    直接调用OpenCV原生绘图接口,给不同等级的物体画不同颜色的外接框+文字标注即可。
代码示例
import cv2
import numpy as np

# 读取图像(提前把示例图下载到本地后替换路径即可)
img = cv2.imread("A1JhD.jpg")
# 替换为你自己的物体检测逻辑,输出格式为(x, y, w, h)的bbox列表
detected_boxes = your_detection_function(img)
# 你已实现的按面积从大到小排序逻辑
detected_boxes = sorted(detected_boxes, key=lambda x: x[2]*x[3], reverse=True)
total_num = len(detected_boxes)

# 按比例设定分级阈值,可自行调整系数
large_threshold = int(total_num * 0.2)
medium_threshold = int(total_num * 0.5)

# 遍历所有bbox完成标注
for idx, (x, y, w, h) in enumerate(detected_boxes):
    # 确定等级和对应颜色(BGR格式)
    if idx < large_threshold:
        level = "大"
        color = (0, 0, 255) # 大物体对应红色框
    elif idx < medium_threshold:
        level = "中"
        color = (0, 255, 255) # 中物体对应黄色框
    else:
        level = "小"
        color = (0, 255, 0) # 小物体对应绿色框
    # 绘制外接框
    cv2.rectangle(img, (x, y), (x+w, y+h), color, 2)
    # 绘制等级文字
    cv2.putText(img, level, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2)

# 展示结果
cv2.imshow("等级标注结果", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 可添加cv2.imwrite("result.jpg", img) 本地保存标注后的图像
可调参数说明
  • 分级规则:调整large_threshold和medium_threshold的系数即可修改比例分级范围,如果要使用固定面积阈值,把判断条件改为if w*h > 1000的形式即可
  • 标注样式:修改cv2.rectangle的最后一个参数调整框的粗细,修改cv2.putText的第4、第6个参数可分别调整文字大小和文字粗细

内容的提问来源于stack exchange,提问作者LOck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:42:05