Python及TensorFlow新手:TensorFlow目标检测API中获取边界框坐标
解决TensorFlow Object Detection API边界框坐标获取问题
嘿,刚接触TensorFlow Object Detection API的时候,搞懂边界框的坐标确实容易懵,我来一步步给你讲清楚:
先搞懂output_dict['detection_boxes']的数值含义
你打印出来的这个数组里,每一个元素都是一个长度为4的列表,格式是**[ymin, xmin, ymax, xmax],而且这些数值都是归一化后的比例值**(范围在0到1之间):
ymin:边界框顶部距离图像顶部的比例xmin:边界框左侧距离图像左边缘的比例ymax:边界框底部距离图像顶部的比例xmax:边界框右侧距离图像左边缘的比例
之所以数值看起来多,是因为API默认会返回大量候选检测框,大部分置信度很低,所以我们需要结合置信度过滤后再处理。
把归一化坐标转换成实际像素坐标
要得到图像里的真实像素坐标,你需要先获取图像的实际高度和宽度,再把归一化值乘以对应的维度。举个具体的代码例子:
# 假设你已经完成了检测,得到了output_dict,且图像是加载好的numpy数组 image_height, image_width = image.shape[:2] # 遍历检测结果,只处理置信度高于0.5的框(阈值可以自己调整) for idx in range(len(output_dict['detection_scores'])): confidence_score = output_dict['detection_scores'][idx] if confidence_score > 0.5: # 取出当前框的归一化坐标 normalized_box = output_dict['detection_boxes'][idx] # 转换为像素坐标 ymin_pixel = int(normalized_box[0] * image_height) xmin_pixel = int(normalized_box[1] * image_width) ymax_pixel = int(normalized_box[2] * image_height) xmax_pixel = int(normalized_box[3] * image_width) # 打印或者使用这些坐标 print(f"目标 {idx+1} 置信度:{confidence_score:.2f},坐标:xmin={xmin_pixel}, ymin={ymin_pixel}, xmax={xmax_pixel}, ymax={ymax_pixel}")
为什么你的代码里没有boxes变量?
教程里的绘制代码可能是直接调用了output_dict['detection_boxes'],没有单独把它赋值给名为boxes的变量,所以你直接用output_dict['detection_boxes']就完全没问题,不用纠结有没有这个变量名~
这样处理后,你就能准确获取到每个有效检测目标的边界框像素坐标啦!
内容的提问来源于stack exchange,提问作者Mandy
相关产品推荐
相关产品推荐

