做语义分割时,不同的网络对标签图像的格式要求不同,pytorch的官方教程中使用mask-rcnn做语义分割,对标签图像的要求时8位的PNG,当我用自己的数据集进行测试时,发现我用LEAR标注工具标注出来的是24位的PNG,为此需要把24位png转成8位png。
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import cv2 as cv
root = './data'
labels = list(sorted(os.listdir(os.path.join(root, "Masks"))))
for i in range(len(labels)):
label_path = os.path.join(root, "Masks", labels[i])
label = cv.imread(label_path)
B,G,R=cv.split(label)
#R = np.array(R)/255.0
R = R.astype(np.uint8)
Image.fromarray(R).save('./8bit/'+labels[i])
#cv.imwrite('./8bit/'+labels[i],R)
转换前
转换后