python,有多个yolo标签文件txt以及对应同名图片的文件夹,有人形人脸两个包含的标签,需要把大图抠图成人形的小图,并将人脸的坐标对应更改保存为新的对应小图的xt
时间: 2024-05-01 18:21:58 浏览: 120
人脸识别和人嘴巴识别,里面附带有所需的文件,只要改变一下文件路径即可使用
这个问题需要用到Python的图像处理库以及文件读写操作,具体步骤如下:
1. 安装必要的库:Pillow和numpy,可以使用pip命令进行安装。
```
pip install Pillow numpy
```
2. 定义一个函数来读取标签文件,将标签信息转换为列表。
```python
import numpy as np
def read_label_file(label_path):
with open(label_path, "r") as f:
lines = f.readlines()
boxes = []
for line in lines:
line = line.strip().split()
label = int(line[0])
x_center = float(line[1])
y_center = float(line[2])
width = float(line[3])
height = float(line[4])
x_min = int((x_center - width/2) * IMAGE_SIZE)
y_min = int((y_center - height/2) * IMAGE_SIZE)
x_max = int((x_center + width/2) * IMAGE_SIZE)
y_max = int((y_center + height/2) * IMAGE_SIZE)
boxes.append([x_min, y_min, x_max, y_max, label])
return np.array(boxes)
```
其中,label_path为标签文件的路径,IMAGE_SIZE为图片的尺寸。
3. 定义一个函数来裁剪图片并保存对应的标签信息。
```python
from PIL import Image
def crop_image(image_path, boxes, save_dir):
image = Image.open(image_path)
for i, box in enumerate(boxes):
x_min, y_min, x_max, y_max, label = box
cropped_image = image.crop((x_min, y_min, x_max, y_max))
cropped_image.save(os.path.join(save_dir, f"{i}.jpg"))
with open(os.path.join(save_dir, f"{i}.txt"), "w") as f:
f.write(f"{label} 0.5 0.5 1.0 1.0\n")
```
其中,image_path为原始图片的路径,boxes为标签信息的列表,save_dir为保存裁剪后图片和标签的文件夹路径。
4. 遍历所有的图片和标签文件,调用read_label_file和crop_image函数进行裁剪和保存。
```python
import os
IMAGE_SIZE = 416
image_folder = "path/to/image/folder"
label_folder = "path/to/label/folder"
save_folder = "path/to/save/folder"
for image_file in os.listdir(image_folder):
if not image_file.endswith(".jpg"):
continue
image_path = os.path.join(image_folder, image_file)
label_path = os.path.join(label_folder, image_file.replace(".jpg", ".txt"))
boxes = read_label_file(label_path)
crop_image(image_path, boxes, save_folder)
```
其中,image_folder为包含所有原始图片的文件夹路径,label_folder为包含所有标签文件的文件夹路径,save_folder为保存裁剪后图片和标签的文件夹路径。
以上就是将大图抠图成人形的小图,并将人脸的坐标对应更改保存为新的对应小图的标签的Python实现方法。
阅读全文