2021-09-26

本文介绍了一种针对存在颜色转换误差的水下数据集的处理方法,通过批量标准化像素点,确保颜色一致性,特别适用于类别众多的数据集。通过代码示例展示了如何使用Python PIL库进行RGB色值调整,提高数据集的可用性。
摘要由CSDN通过智能技术生成

数据处理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等文件,更改后缀即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值