在运行实验的过程中,遇到了一个问题:
Traceback (most recent call last):
File "get_cropped_val_images.py", line 86, in <module>
gt_bboxes = get_gt_bboxes[str(image_names[i].replace('jpg', 'xml'))]
TypeError: 'function' object is not subscriptable

根据错误信息,您正在尝试对函数get_gt_bboxes进行索引操作[str(image_names[i].replace(‘jpg’, ‘xml’))],这是不允许的,因为函数是不可索引的对象。
报错的代码片段为:
image_names = []
for name in os.listdir('val/'):
image_names.append(name)
gt_all_bboxes = get_gt_bboxes()
output_folder = 'output/'
interval = 100
for i in range(len(image_names)):
image_path = os.path.join('val/', image_names[i])
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
masks = mask_generator.generate(image)
bbox_list = extract_bboxes(masks)
gt_bboxes = get_gt_bboxes[str(image_names[i].replace('jpg', 'xml'))]
根据错误信息,您正在尝试对函数get_gt_bboxes进行索引操作[str(image_names[i].replace(‘jpg’, ‘xml’))],这是不允许的,因为函数是不可索引的对象。
可能的原因是您意图调用get_gt_bboxes函数并将其结果存储在gt_all_bboxes中,但是在代码中我们看不到get_gt_bboxes函数的定义或相关实现。
请确保在代码中包含了正确的get_gt_bboxes函数的定义,并将其结果存储在gt_all_bboxes中,然后在后续代码中使用gt_all_bboxes来获取边界框。
把代码改进后:
image_names = []
for name in os.listdir('val/'):
image_names.append(name)
gt_all_bboxes = get_gt_bboxes()
output_folder = 'output/'
interval = 100
for i in range(len(image_names)):
image_path = os.path.join('val/', image_names[i])
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
masks = mask_generator.generate(image)
bbox_list = extract_bboxes(masks)
gt_bboxes = gt_all_bboxes[str(image_names[i].replace('jpg', 'xml'))]
selected_bboxes = []
for bbox_gt in gt_bboxes:
for bbox_pred in bbox_list:
if is_bbox_inside(bbox_gt, bbox_pred):
selected_bboxes.append(bbox_pred)
break

可以运行结果!
文章讲述了在运行图像处理实验时遇到的TypeError,问题出在尝试对函数get_gt_bboxes进行索引操作。解决方案是确保get_gt_bboxes函数已正确定义并存储其结果,然后在后续代码中使用该结果。修正后的代码能正确地从XML文件中获取边界框信息。
3657

被折叠的 条评论
为什么被折叠?



