数据处理02
水下数据集本就难找,还有些开源资源数据集是从 .mat 文件转换成 .png格式
这就容易导致转换过程中,像素点色值出现误差。比如RGB(255,255,0)黄色,同(230,230,0),肉眼就很难分辨出来,给工作带来很多不必要的麻烦。
如果是面对较大数据集,很可能在进行数据读取并训练时,数据类别高达200+,影响后续效果,难以进行类别统计。
记录下一套代码,用来对该类数据集进行颜色批量化处理,便于以后工作。
import os.path
import glob
from PIL import Image
def colorchange(jpgfile,outdir):
img = Image.open(jpgfile) # 读取需要进行颜色转换的文件夹下所有图片
# print (img.size)#打印图片大小
# print (img.getpixel((4,4)))
width = img.size[0] # 长度
height = img.size[1] # 宽度
print(os.path.basename(jpgfile))
try:
for i in range(0, width): # 遍历该图片所有长度的点
for j in range(0, height): # 遍历所有宽度的点
data = (img.getpixel((i, j))) # 打印该图片的所有点
# print (data)#打印每个像素点的颜色RGBA的值(r,g,b,alpha)
# print (data[0])#打印RGBA的r值
#使用if条件进行判断,对色值处于不同区间的像素点进行划分并重新赋值,保证其同一类别的像素点颜色数值统一。注意:如果数据集过于复杂,类别数量极多,则需自己认真考虑如何进行准确高效的区分
# if (data[0] >= 128 and data[1] >= 128 and data[2] >=128 ):
# img.putpixel((i, j), (255, 255, 255))
# if (data[0] >= 128 and data[1] >= 128 and data[2] <=128 ):
# img.putpixel((i, j), (255, 255, 0))
# if (data[0] >= 128 and data[1] <= 128 and data[2] >=128 ):
# img.putpixel((i, j), (255, 0, 255))
# if (data[0] >= 128 and data[1] <= 128 and data[2] <=128 ):
# img.putpixel((i, j), (255, 0, 0))
#
# if (data[0] <= 128 and data[1] >= 128 and data[2] >=128 ):
# img.putpixel((i, j), (0, 255, 255))
# if (data[0] <= 128 and data[1] >= 128 and data[2] <=128 ):
# img.putpixel((i, j), (0, 255, 0))
# if (data[0] <= 128 and data[1] <= 128 and data[2] >=128 ):
# img.putpixel((i, j), (0, 0, 255))
# if (data[0] <= 128 and data[1] <= 128 and data[2] <=128 ):
# img.putpixel((i, j), (0, 0, 0))
# if (data[0] >= 128 and data[1] >= 128 and data[2] >=128 ):
# img.putpixel((i, j), (0, 0, 0))
# yellow
if (data[0] >= 128 and data[1] >= 128 and data[2] <=128 ):
img.putpixel((i, j), (255, 255, 0))
# if (data[0] >= 128 and data[1] <= 128 and data[2] >=128 ):
# img.putpixel((i, j), (0, 255, 0))
# Red
if (data[0] >= 128 and data[1] <= 128 and data[2] <=128 ):
img.putpixel((i, j), (255, 0, 0))
# Green
if (data[0] <= 128 and data[1] >= 128 and data[2] <=128 ):
img.putpixel((i, j), (0, 255, 0))
# if (data[0] <= 128 and data[1] >= 128 and data[2] >=128 ):
# img.putpixel((i, j), (255, 0, 0))
#
# if (data[0] <= 128 and data[1] >= 128 and data[2] <=128 ):
# img.putpixel((i, j), (255, 0, 255))
# Blue
if (data[0] <= 128 and data[1] <= 128 and data[2] >=128 ):
img.putpixel((i, j), (0, 0, 255))
# Black
if (data[0] <= 128 and data[1] <= 128 and data[2] <=128 ):
img.putpixel((i, j), (0, 0, 0))
img = img.convert("RGB") # 把图片强制转成RGB
img.save(os.path.join(outdir, os.path.basename(jpgfile))) # 保存修改像素点后的图片
except Exception as e:
print(e)
for jpgfile in glob.glob("/home/gy/AdvSemiSeg-master/dataset/DUT-USEG/SegmentationClassAug1/*.png"):
colorchange(jpgfile,"/home/gy/AdvSemiSeg-master/dataset/DUT-USEG/SegmentationClassAug2") # 改变颜色后保存的文件夹
# 注意,*.* 后一个* 表示的是文件扩展名也即是文件类型,若文件夹下是jpg等文件,更改后缀即可