水下数据集本就难找 还有些开源资源数据集是从 .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)



