语义分割数据集处理之降低数据分辨率

目标检测转语义分割的新手,在数据集处理阶段遇到了一些麻烦,特此记录一下。

labelme标注的数据集,成功转为原始影像图与对应的mask图,但转出的mask图为调色板格式,一开始在影像图与mask图同步resize的过程中,mask图resize后的图片与原始mask在像素值上存在较大差别,经过一番折腾,终于在转化前后保持像素值不变,以下为具体代码(切记,用labelme处理的mask图不能用opencv处理,会改变mask的像素值)。

import cv2
from PIL import Image
import os
import numpy as np
import imgviz


# 定义待批量裁剪图像的路径地址
IMAGE_INPUT_PATH = './VOC2007/JPEGImages'
MASK_INPUT_PATH = './VOC2007/SegmentationClass'
# 定义裁剪后的图像存放地址
IMAGE_OUTPUT_PATH = './VOC2007/JPEGImages_resize'
MASK_OUTPUT_PATH = './VOC2007/SegmentationClass_resize'
imglist = os.listdir(IMAGE_INPUT_PATH)
masklist = os.listdir(MASK_INPUT_PATH)

def save_colored_mask(path, save_path,width,height):
    lbl_pil = Image.open(path)
    lbl_pil = lbl_pil.resize((width, height))
    colormap = imgviz.label_colormap()
    lbl_pil.putpalette(colormap.flatten())
    lbl_pil.save(save_path)


for i in range(len(imglist)):
    # 每个图像全路径
    image_input_fullname = IMAGE_INPUT_PATH + '/' + imglist[i]
    mask_input_fullname = MASK_INPUT_PATH + '/' + imglist[i].replace('.jpg','.png')
    image_output_fullname = IMAGE_OUTPUT_PATH + '/' + imglist[i]
    mask_output_fullname = MASK_OUTPUT_PATH + '/' + imglist[i].replace('.jpg','.png')
    
    img = cv2.imread(image_input_fullname)
    height, width = img.shape[:2]

    # 定义缩放信息 以等比例缩放到1024为例
    scale=1024/height
    height=1024
    width=int(width*scale)
    
   
    img = cv2.resize(img, (width, height))
    cv2.imwrite(image_output_fullname,img)

    save_colored_mask(mask_input_fullname,mask_output_fullname, width,height)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值