如何使用Python OpenCV识别并标注图像中的大中小尺寸物体?
实现步骤
你已经完成了物体检测和尺寸排序核心逻辑,只需要补充分级规则、可视化标注两步即可实现需求:
- 确定尺寸分级规则
可根据你的使用场景二选一:
- 自适应比例分级:将已排序的物体列表按占比分段,比如总检测数为n,前20%为大物体、中间30%为中物体、后50%为小物体,可适配不同图像的物体分布
- 固定阈值分级:提前设定小/中/大对应的面积阈值,比如小于200像素为小、200~1000像素为中、大于1000像素为大,适合固定拍摄距离的标准化场景
- 图像标注实现
直接调用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
相关产品推荐
相关产品推荐

