遮住不需要的图片内容并且删除其label
import cv2
import numpy as np
import os,random
import xml.dom.minidom
# from PIL import Image
import os,shutil
import math
def xml_write(picname,info,img_len,img_height):
xml_file = open((picname[0:-4]+'.xml'),'w')
xml_file.write('<annotation>\n')
xml_file.write(' <folder>VOC2007</folder>\n')
xml_file.write(' <filename>' +picname + '</filename>\n')
xml_file.write(' <size>\n')
xml_file.write(' <width>' + str(img_len) + '</width>\n')
xml_file.write(' <height>' + str(img_height) + '</height>\n')
xml_file.write(' <depth>3</depth>\n')
xml_file.write(' </size>\n')
for i in info:
# print(i)
spt=i[4]
xml_file.write(' <object>\n')
xml_file.write(' <name>' + spt + '</name>\n')
xml_file.write(' <pose>Unspecified</pose>\n')
xml_file.write(' <truncated>0</truncated>\n')
xml_file.write(' <difficult>0</difficult>\n')
xml_file.write(' <bndbox>\n')
xml_file.write(' <xmin>' + str(i[0]) + '</xmin>\n')
xml_file.write(' <ymin>' + str(i[1]) + '</ymin>\n')
xml_file.write(' <xmax>' + str(i[2]) + '</xmax>\n')
xml_file.write(' <ymax>' + str(i[3]) + '</ymax>\n')
xml_file.write(' </bndbox>\n')
xml_file.write(' </object>\n')
xml_file.write('</annotation>')
def xml_read(filename):
# print(filename)
if os.path.exists(filename) is False:
return None
dom = xml.dom.minidom.parse(filename)
#得到文档元素对象
root = dom.documentElement
object_ = root.getElementsByTagName('object')
info=[]
for object_1 in object_:
name=object_1.getElementsByTagName("name")[0].firstChild.data
bndbox=object_1.getElementsByTagName("bndbox")[0]
xmin=int(bndbox.getElementsByTagName("xmin")[0].firstChild.data)
ymin=int(bndbox.getElementsByTagName("ymin")[0].firstChild.data)
xmax=int(bndbox.getElementsByTagName("xmax")[0].firstChild.data)
ymax=int(bndbox.getElementsByTagName("ymax")[0].firstChild.data)
if name=='nolimit' :
info.append([xmin,ymin,xmax,ymax,name])
return info
def scale(a,b):
a=np.float32(a)
a=a*b
a=np.uint8(a)
return a
def RotateClockWise90(img):
trans_img = cv2.transpose(img)
new_img = cv2.flip(trans_img, 1)
return new_img
def write_file(content,filePath='acount.txt'):
with open(filePath, 'w') as fp1:
fp1.write('%s'%content)
fp1.close()
def gaussian_noise(image, degree=None):
row, col, ch = image.shape
mean = 0
if not degree:
var = np.random.uniform(0, 1)
else:
var = degree
sigma = var #** 0.5
gauss = np.random.normal(mean, sigma, (row, col, ch))
print(*gauss)
gauss = gauss.reshape(row, col, ch)
noisy = image + gauss
cv2.normalize(noisy, noisy, 0, 255, norm_type=cv2.NORM_MINMAX)
noisy = np.array(noisy, dtype=np.uint8)
return noisy
def motion_blur(image, degree=10, angle=20):#运动模糊
image = np.array(image)
M = cv2.getRotationMatrix2D((degree/2, degree/2), angle, 1)
motion_blur_kernel = np.diag(np.ones(degree))
motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree))
motion_blur_kernel = motion_blur_kernel / degree
blurred = cv2.filter2D(image, -1, motion_blur_kernel)
# convert to uint8
cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
blurred = np.array(blurred, dtype=np.uint8)
return blurred
# context=[]
# with open('11.txt','r') as f:
# for i in f.readlines():
# context.append(i[:-1].split(';'))
# # print(context)
# for i in context:
# xml_write(i[0][:-4]+'.xml',[i[1:]],300,300)
origin_dir='./'
filenames=[]
for files in os.scandir(): #os.walk(origin_dir):
if files.name[-1]=='l':
filenames.append(files.name)
for file in filenames:#[len(filenames)//2:len(filenames)//1]:
# print(file)
infos=xml_read(origin_dir+file)
img=cv2.imread(file[:-4]+'.jpg')
img_h,img_w,_=img.shape
kkinfo=[]
for i in infos:
w=i[2]-i[0]
h=i[3]-i[1]
# cv2.rectangle(img,(i[0],i[1]),(i[2],i[3]),(255,0,0),1)
# cv2.rectangle(img,(i[0]-int(0.6*w//1),i[1]),
# (i[2]-int(1.1*w//1),i[3]),(255,0,0),1)
img[i[1]:i[3],i[0]-int(0.6*w//1):i[2]-int(1.1*w//1)]=0
kkinfo.append(i)
cv2.imwrite('2/'+file[:-4]+'.jpg',img)
xml_write('2/'+file[:-4]+'.jpg',kkinfo,img_w,img_h)