读取数据 根据生成的裁切框生成交并比的框并且判断正样本负样本并且输出交并比之后的图片样式
对于读取的每张图片,我们需要进行以下步骤:
- 根据生成的裁切框,计算裁切框和所有真实框的交并比(IoU)。如果裁切框和某个真实框的IoU大于一定阈值(通常为0.5),则认为该裁切框为正样本,否则为负样本。
- 对于每个正样本,我们需要将其裁切出来,并且调整大小到固定大小,通常为网络输入的大小。对于负样本,我们可以直接将其调整大小到固定大小。这些裁切后的图片就是交并比之后的图片样式。
- 将所有裁切后的图片和其对应的标签(正样本为1,负样本为0)保存到一个数据集中,用于训练分类器或检测器。
下面是一个示例代码,用于生成交并比之后的图片样式和标签:
import cv2
# 读取图片和真实框
image = cv2.imread('image.jpg')
boxes = [[50, 50, 100, 100], [200, 200, 250, 250]]
# 生成裁切框
proposals = [[0, 0, 50, 50], [75, 75, 125, 125], [150, 150, 200, 200], [225, 225, 275, 275]]
# 计算交并比
ious = []
for proposal in proposals:
proposal_box = [proposal[0], proposal[1], proposal[2] - proposal[0], proposal[3] - proposal[1]]
ious.append(max([calculate_iou(proposal_box, box) for box in boxes]))
# 裁切图片并调整大小
size = (32, 32)
for i, proposal in enumerate(proposals):
if ious[i] > 0.5:
# 正样本
x1, y1, x2, y2 = proposal
roi = image[y1:y2, x1:x2]
roi_resized = cv2.resize(roi, size)
cv2.imwrite(f'positive_{i}.jpg', roi_resized)
label = 1
else:
# 负样本
roi = image[proposal[1]:proposal[3], proposal[0]:proposal[2]]
roi_resized = cv2.resize(roi, size)
cv2.imwrite(f'negative_{i}.jpg', roi_resized)
label = 0
# 保存标签
with open('labels.txt', 'a') as f:
f.write(f'{label}\n')
其中,calculate_iou函数可以根据两个框的坐标计算它们的交并比。在这里不再赘述
原文地址: https://www.cveoy.top/t/topic/cQZo 著作权归作者所有。请勿转载和采集!