参考链接
代码
cleardata
:可以将传进来的yolov5的标签txt中的类别数统计出来removeiCCPWarn
:将单个文件中的png图像消除iCCP影响再存入新的文件夹removeiCCPWarn_root
:传入root目录,里面包含了子文件夹
import os
import cv2
from tqdm import tqdm
from skimage import io
classnames = ['nest', 'kite', 'balloon', 'trash']
# 1.{'nest': 2955, 'kite': 508, 'balloon': 519, 'trash': 535} G:\pycharmprojects\yoloair-iscyy-beta\datasets\A_linepaste_trash_png_2\images
# 2016张 * 4
# {'nest': 0, 'kite': 672, 'balloon': 672, 'trash': 672} 添加两个obj G:\pycharmprojects\ScriptCodes_lwd\linepaste\save\save_7\images
# {'nest': 0, 'kite': 672, 'balloon': 672, 'trash': 672} 左右翻转 G:\pycharmprojects\ScriptCodes_lwd\linepaste\save\save_7\save\save_1_lrflip
# {'nest': 0, 'kite': 672, 'balloon': 672, 'trash': 672} 左右翻转+黑块 G:\pycharmprojects\ScriptCodes_lwd\linepaste\save\save_7\save\save_2_lrflipblock
# {'nest': 0, 'kite': 672, 'balloon': 672, 'trash': 672} 提高对比度+加高斯噪声(mean=0, sigma=0.08) G:\pycharmprojects\ScriptCodes_lwd\linepaste\save\save_7\save\save_3_noise
# 扩充后总共: {'nest': 2955, 'kite': 3196, 'balloon': 3207, 'trash': 3223}
# 2.{'nest': 6822, 'kite': 1455, 'balloon': 1552, 'trash': 1455}
# 3.{'nest': 4487, 'kite': 834, 'balloon': 834, 'trash': 822}
# {'nest': 516, 'kite': 88, 'balloon': 87, 'trash': 85}
def iCCPwran(image_dir):
imagefiles = os.listdir(image_dir)
for file in imagefiles:
image = cv2.imread(os.path.join(image_dir, file))
print(file)
def cleardata(rootdir): # 输入的是labels_train_dir
# 统计类别数
datadict = dict()
for name in classnames:
datadict[name] = 0
# 获取到txt文本每行的内容
txtfiles = os.listdir(rootdir)
for txtfile in tqdm(txtfiles):
with open(os.path.join(rootdir, txtfile), 'r') as f:
data = f.read().strip().split()
clsindex = int(data[0])
datadict[classnames[clsindex]] += 1
return datadict
# 消除png的iCCP影响
def removeiCCPWarn(png_imagesdir, savedir):
assert os.path.exists(png_imagesdir), f'{
png_imagesdir} not exists.'
if not os.path.exists(savedir):
os.makedirs(savedir)
filelist = os.listdir(png_imagesdir)
for file in tqdm(filelist):
image = io.imread(os.path.join(png_imagesdir, file))
image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGRA)
cv2.imencode('.png', image)[1].tofile(os.path.join(savedir, file))
def removeiCCPWarn_root(png_imagesrootdir, saverootdir):
if not os.path.exists(saverootdir):
os.makedirs(saverootdir)
# 因为子文件下有train val test三个任务目录,所以多了这个函数
testsets = os.listdir(png_imagesrootdir)
for test in testsets:
png_imagesdir = os.path.join(png_imagesrootdir, test)
savedir = os.path.join(saverootdir, test)
removeiCCPWarn(png_imagesdir, savedir)
if __name__ == '__main__':
# image_dir = r'G:\pycharmprojects\yoloair-iscyy-beta\datasets\A_linepaste_trash_png\images\train'
# iCCPwran(image_dir)
# rootdir = r'G:\A_lwd_paper\lintrash_datasets\labels'
# datadict = cleardata(rootdir)
# print(datadict)
# -------------------2. 传入root目录,里面包含了子文件夹--------------- #
png_imagesrootdir = r'G:\A_lwd_paper\lintrash_datasets\A_data\images' # 只有train
saverootdir = r'G:\A_lwd_paper\lintrash_datasets\A_data\images_noiCCP'
removeiCCPWarn_root(png_imagesrootdir, saverootdir)
# -------------------1. 传入单个目录,里面没有包含子文件夹--------------- #
# png_imagesdir = r'G:\pycharmprojects\yoloair-iscyy-beta\datasets\A_linepaste_trash_png_2\images\val'
# savedir = r'G:\pycharmprojects\yoloair-iscyy-beta\datasets\A_linepaste_trash_png_2\images_iCCP'
# removeiCCPWarn(png_imagesdir, savedir)