python opencv图像裁切与保存(标注)代码

本文介绍了一种从特定文件中读取矩形框坐标的方法,并使用这些坐标来从原始图像中裁剪出目标区域。通过Python的OpenCV库实现图像的读取、绘制矩形框及裁剪等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import Read_RectTXT
import numpy as np
import torchvision.transforms as transforms
import cv2 as cv

filename = 'DATA/groundtruth_rect.txt'
rect = Read_RectTXT.Read_RectTXT(filename)


img = cv.imread('DATA/img/.jpg')

a = rect[0,0]
b = rect[0,1]
c = rect[0,0]+rect[0,2]
d = rect[0,1]+rect[0,3]
# cv.rectangle(img, (a, b), (c, d), (0, 255, 0), 4)# cv2.rectangle(img, 左上角,右下角,color,宽度)

# font = cv.FONT_HERSHEY_SIMPLEX
# text = '001'
# cv.putText(img, text, (50, 50), font, 1, (0, 0, 255), 1)
# cv.imwrite('criterion.jpg', img)
cv.imwrite('criterion.jpg', img[b:d,a:c])
### YOLOv8 数据集创建图像裁切方法教程 #### 创建适用于 YOLOv8 的数据集 为了使自定义数据集能够被 YOLOv8 使用,需遵循其特定的数据结构和格式。以下是具体的操作说明: 1. **准备数据目录结构** 需要按照标准的 YOLO 数据集格式构建文件夹结构[^1]。通常情况下,该结构应如下所示: ``` dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ ``` 2. **标注文件格式** 标注文件采用 `.txt` 文件存储目标框信息,每行表示一个边界框,格式为: `class_id center_x center_y width height` 所有数值均为相对于图片宽高的比例值。 3. **配置 YAML 文件** 编写用于描述数据集路径和类别的 YAML 文件。例如: ```yaml path: ./dataset # 数据集根目录 train: images/train # 训练集相对路径 val: images/val # 验证集相对路径 nc: 5 # 类别数量 names: ['plane', 'ship', 'car', 'cat', 'dog'] # 类别名称列表 ``` --- #### 图像裁切及相关操作 对于大规模数据集(如 SODA-A 或 DOTAv2),可能需要对原始图像进行预处理以提高训练效率。以下是一个基于 PythonOpenCV 实现的图像裁切脚本示例[^2]: ```python import os import cv2 from xml.dom import minidom def crop_image_and_annotations(image_path, annotation_path, output_dir, crop_size=640, overlap_ratio=0.2): """ 裁剪图像并更新对应的标注信息。 参数: image_path (str): 原始图像路径。 annotation_path (str): 对应的 XML 标注文件路径。 output_dir (str): 输出裁剪后的图像标注文件的保存目录。 crop_size (int): 单个裁剪区域的边长,默认为 640。 overlap_ratio (float): 裁剪窗口之间的重叠比率,默认为 0.2。 """ img = cv2.imread(image_path) h, w = img.shape[:2] step = int(crop_size * (1 - overlap_ratio)) crops = [] for y in range(0, h, step): for x in range(0, w, step): end_x = min(x + crop_size, w) end_y = min(y + crop_size, h) start_x = max(end_x - crop_size, 0) start_y = max(end_y - crop_size, 0) cropped_img = img[start_y:end_y, start_x:end_x] # 更新标注信息逻辑省略... save_name = f"{os.path.basename(image_path).split('.')[0]}_{start_x}_{start_y}.jpg" cv2.imwrite(os.path.join(output_dir, "images", save_name), cropped_img) crop_image_and_annotations("path/to/image.jpg", "path/to/annotation.xml", "./output/") ``` 上述代码实现了按指定尺寸裁剪图像的功能,并保留了足够的重叠部分以便覆盖边缘对象。 --- #### 设置训练参数中的图像尺寸 在调用 YOLOv8 进行训练时,可以通过命令行参数设置输入图像的分辨率。默认情况下,`--imgsz` 参数控制训练期间使用的图像大小。例如,在官方文档中提到的默认值为 128 像素,但在实际应用中可以根据需求调整至更高分辨率(如 640 或 1024)[^3]。 运行训练命令时可指定此选项: ```bash yolo detect train data=DOTAv2.yaml model=yolov8n.pt epochs=100 imgsz=640 ``` 此处的 `imgsz=640` 表明所有输入图像将在训练前缩放至 640×640 大小。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值