语义分割中最容易出错的图片格式转换

文章提供了三个Python脚本,分别用于将由labelme生成的16位mask转换为8位,8位转换为24位以进行数据增强,以及之后从24位再转换回8位。转换过程中涉及cv2和skimage库,用于图像读取、缩放、颜色空间转换等操作。
摘要由CSDN通过智能技术生成

语义分割中经常会遇到图片格式转换的事情,labelme的json转换出来的mask是16位,训练的时候需要的mask一般是8位,如果要做离线数据增强的话,mask也要做增强,那么mask需要转换为24位,增强完毕以后,24位要转换为8位,以下三个脚本记录这些转换。

16位转8位

# _*_ coding: UTF-8 _*_
import os
import cv2
import natsort
import numpy as np
from skimage import io
input_file = "/xxx/"   ### 由labelme转换出来的16位的mask文件夹路径
out_file = "/xxx/"   ## 8位mask的文件夹路径
img_type = ".png"
dirs = os.listdir(input_file)

for name in natsort.natsorted(dirs):
    print (name)
    file_name = os.path.join(input_file,name)
    print (file_name)
    img = io.imread(file_name) 
    img = img.astype(np.uint8)
    print (np.unique(img))
    img = cv2.resize(img,(640,640),interpolation =cv2.INTER_LINEAR)
    print (np.unique(img))
    cv2.imwrite(os.path.join(out_file ,name.replace('mask','NB')),img)
    

8位转24位

# _*_ coding: UTF-8 _*_
import os
import cv2
import natsort
import numpy as np
from skimage import io
input_file = "/xxx/"  ####8位 图片路径
out_file = "/xxx/"  #### 24位图片路径
img_type = ".png"
dirs = os.listdir(input_file)

for name in natsort.natsorted(dirs):
    print (name)
    file_name = os.path.join(input_file,name)
    print (file_name)
    img=cv2.imread(file_name,0) 
    img[img==1] = 150  ##转24位的时候 为了将图片像素的差异看得更清楚一些 所以把第1类的值 由 1 转为150
    img[img==2] = 250  ##转24位的时候 为了将图片像素的差异看得更清楚一些 所以把第2类的值 由 2转为250
    aa = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

    cv2.imwrite(os.path.join(out_file ,name),aa)

24位转8位

# _*_ coding: UTF-8 _*_
import os
import cv2
import natsort
import numpy as np
from skimage import io
input_file = "/mnt/xr/" ### 24位图路径
out_file = "/mnt/d/xx/" ## 8位图路径
img_type = ".png"
dirs = os.listdir(input_file)

for name in natsort.natsorted(dirs):
    print (name)
    file_name = os.path.join(input_file,name)
    print (file_name)
    img=cv2.imread(file_name) 

    bgr2gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    print (np.unique(bgr2gray))

    bgr2gray[bgr2gray==150] = 1
    bgr2gray[bgr2gray==250] = 2
    print (np.unique(bgr2gray))

    cv2.imwrite(os.path.join(out_file ,name),bgr2gray)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值