将0-255的灰度图像转成0-1二值图像(或将灰度图像中特定灰度的像素改成其它灰度值)
在语义分割VOC数据格式中255表示掩膜,用0和255标注的二分类问题需要修改为0和1标注或者0和255以内的灰度值标注的图像
代码修改:end_switch为图像后缀
binary为修改后的值(把非0像素改成1之后整个图像就是黑色的,为了方便查看可以改成 (0, 255) 的值)
如果想把特定灰度值的像素改成其它值,可以把img[img != 0] = binary 这行注释掉,把img[img == 10] = 5反注释
执行:把脚本放在灰度图像所处目录下
├── mask
├── 1.png
├── 2.png
├── …
└── trans255to1.py
import os
import sys
from PIL import Image
import numpy as np
path = "./" # 放在其它路径时记得最后加'/'
end_switch = 'png'
binary = 1
i = 0
filelist = os.listdir(path)
for filename in filelist:
if filename != sys.argv[0]:
if filename.endswith(end_switch):
# print(filename)
file_path = os.path.join(path, filename)
image = Image.open(file_path)
img = np.array(image)
img[img != 0] = binary
# 把灰度值为10的像素改成5:
# img[img == 10] = 5
image = Image.fromarray(img, 'L')
filename = filename
image.save("./" + filename)
i += 1
if i % 100 == 0:
print(filename + ' finished')