在单通道彩图上踩的坑

使用labelme后,生成如图所示文件夹,其中JPEGImages是原图,SegmentationClassPNG是标签。
在这里插入图片描述
此时SegmentationClassPNG中的标签(masks)是只包含0和1的二进制文件,0表示背景,1表示要识别的物体类型。(二分类),为单通道彩色图
在这里插入图片描述

在这里插入图片描述

查看图片的像素点:参考:Python查看图片模式及像素
在这里插入图片描述

src= Image.open(r"D:/CV/images/change/vocSample/SegmentationClassPNG/bad-003.png")

print(src.mode)


for y in range(src.size[1]):#行不变
	for x in range(src.size[0]):#列变化
		pix = src.getpixel((x,y))
		print(pix)

此时SegmentationClassPNG中图片的像素点如下:
在这里插入图片描述
由于原数据集较小,因此使用albumentations进行数据增强,由于cv2默认读取为BGR格式,因此masks变成了多通道彩色图。
在这里插入图片描述

在这里插入图片描述

1.将多通道彩色图转为单通道灰度图
在这里插入图片描述

from PIL import Image
import os 
path = 'D:\\CV\\images\\test\\masks' # 读取图片文件夹路径
save_path = 'D:\\CV\\images\\test\\masks_oneChennal'  # 保存图片文件夹路径
file_list = os.listdir(path) # 读取路径下所有图片的名字

# 对每张图片进行转换
for file in file_list:
    o_img = Image.open(path+ '/' + file)
    L_img = o_img.convert('L') # 转换为灰度图片
    L_img.save(save_path + '/' + file)
print("已完成")

在这里插入图片描述

在这里插入图片描述
查看此时的像素点由0和38构成:
在这里插入图片描述

3.将图片的像素值变为只包含0或1的二进制文件。参考:数据增强系列(5)PyTorch和Albumentations用于语义分割

def preprocess_mask(mask):
    mask = mask.astype(np.uint8)
    mask[mask == 0] = 0
    mask[(mask == 1) | (mask == 38)] = 1
    return mask
src= Image.open("D:/CV/images/MyDataSet/UnetDataSet/test/UnetTestOut/new.png")
mat = np.array(src)
print(mat)
mask=preprocess_mask(mat)
print(mask)
dst = Image.fromarray(mask, 'P')
dst.save("D:/CV/images/MyDataSet/UnetDataSet/test/UnetTestOut/01.png")

原来的多通道图片转为单通道灰度图后,并不是完全由0或1构成,需要进行转换,如下图:
在这里插入图片描述

此时的01.png仅是只包含0和1的二进制文件
3.将单通道灰度图,变为单通道彩图,更容易区分,参考:numpy转PIL.Image: 处理Mask图像为单通道的彩色/灰度图colormap.png

import numpy as np
import PIL.Image as Image

def preprocess_mask(mask):
    mask = mask.astype(np.uint8)
    mask[mask == 0] = 0
    mask[(mask == 1) | (mask == 38)] = 1
    return mask
src= Image.open("D:/CV/images/MyDataSet/UnetDataSet/test/UnetTestOut/new.png")
mat = np.array(src)
print(mat)
mask=preprocess_mask(mat)
print(mask)
dst = Image.fromarray(mask, 'P')
bin_colormap = [0,0,0] + [255,0,0]*254    # 二值调色板,红色
dst.putpalette(bin_colormap)
dst.save("D:/CV/images/MyDataSet/UnetDataSet/test/UnetTestOut/01.png")

在这里插入图片描述在这里插入图片描述

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值