在运行yolov3算法时,自己的数据集图片太大,如果直接resize成算法输入大小,会破坏原先的RGB结构,所以这里采用裁剪的方式
原本的数据集标签格式为:filename,X1,Y1,X2,Y2,X3,Y3,X4,Y4,type
得到的算法输入标签为:归一化形式的x,y,w,h
import os
import cv2
import csv
import math
def crop(filepath,destpath):
pathdir=os.listdir(filepath)
for alldir in pathdir:
child=os.path.join(filepath,alldir) #被裁减图片的路径
dest=os.path.join(destpath,alldir) #裁减后图片的路径
if os.path.isfile(child):
image=cv2.imread(child)
sp=image.shape
sz1=int(sp[1])# width-x
sz2=int(sp[0])# height-y
#with open('./alter.csv','r') as f:
with open("./train.csv",'r') as f: #训练集标签的csv文件,文件中标签格式为:图片名称、4个点坐标,类别
lines=csv.reader(f)
for line in lines:
name=line[0]
if name==alldir:
name,x1,y1,x2,y2,x3,y3,x4,y4,x_cen,y_cen,cla=center(line)
#通过center函数把文档中每行的内容提取出来
a,b,c,d=right_crop(x1,y1,x2,y4)
#right_crop函数返回裁减后的各个相应位置
#下边算出标志在裁剪后图片中的位置
x1=x1-a
y1=y1-c
x2=x3-a
y2=y3-c
#