yolov5crop
时间: 2025-05-03 10:49:34 浏览: 25
### 使用 YOLOv5 实现目标检测后的 Crop 功能
YOLOv5 是一种高效的实时目标检测框架,支持多种扩展功能,其中包括对检测到的目标进行裁剪(crop)。以下是实现该功能的具体方法:
#### 修改 `detect.py` 文件
为了实现在目标检测后保存每个检测框对应的裁剪图片,可以在 `detect.py` 中加入额外的逻辑来提取并存储这些区域。具体操作如下所示[^2]。
```python
import cv2 # 导入 OpenCV 库用于图像处理
for *xyxy, conf, cls in reversed(det):
c = int(cls) # 获取类别索引
label = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')
# 添加裁剪逻辑
if save_crop: # 如果启用了保存裁剪选项
xywh = (torch.tensor(xyxy).view(1, 4)).tolist()[0] # 转换为列表形式
x1, y1, x2, y2 = map(int, xywh[:4]) # 提取边界框坐标
cropped_image = im0[y1:y2, x1:x2] # 使用 NumPy 切片获取裁剪部分
# 定义保存路径
crop_save_dir = Path(save_dir / 'crops' / names[c])
crop_save_dir.mkdir(parents=True, exist_ok=True) # 创建目录
crop_file_name = str(uuid.uuid4()) + '.jpg' # 随机命名裁剪图片
crop_path = crop_save_dir / crop_file_name
# 保存裁剪图片
cv2.imwrite(str(crop_path), cropped_image)
annotator.box_label(xyxy, label, color=colors(c, True))
```
上述代码片段实现了以下功能:
- **裁剪逻辑**:通过 `im0[y1:y2, x1:x2]` 提取出感兴趣区域(ROI),其中 `(x1, y1)` 和 `(x2, y2)` 表示检测框的左上角和右下角坐标。
- **保存裁剪图片**:创建专门的子文件夹(如 `save_dir/crops/className`),并将每张裁剪图以随机名称保存至对应分类文件夹中。
#### 参数配置说明
在运行脚本前,需确保设置了参数 `--save-crop` 或者将其默认值设为 `True`,以便启用裁剪功能。可以通过命令行调用方式指定此参数,例如:
```bash
python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images --save-crop
```
这样可以保证每次执行检测时都会自动生成裁剪后的图片集合。
---
### 注意事项
如果需要进一步优化性能或者调整细节,可以根据实际需求修改裁剪尺寸、重叠比例等超参设置。此外,在多线程或多 GPU 环境下部署时需要注意同步机制以及可能引发的竞争条件问题。
阅读全文
相关推荐

















