代码实现:
import cv2
from PIL import Image
import numpy as np
import SimpleITK
img = Image.open(r"D:\桌面\images\6.png")
#将图片转为一个二维数组(480*854)
img_array=np.array(img)
#宽度为854
width=len(img_array[0])
#高度为480
height= len(img_array)
for i in range(height):
for j in range(width):
if(img_array[i][j]==1):
img_array[i][j] = 255
print(img_array)
#将数组又转回图片
new_img=SimpleITK.GetImageFromArray(img_array)
#保存这张新图片
SimpleITK.WriteImage(new_img,r"D:\6.png")
如果是要将一个文件夹所有的图片都作这样的批量处理:
import glob
import os
import SimpleITK
from PIL import Image
import numpy as np
#返回的是一个列表[xxx/label/xxx.png,xxx/label/xxx.png,xxx/label/xxx.png....]
paths=glob.glob(os.path.join("/home/ouyang/Seg8K_dataset/train/label","*.png"))
#path比如说是..../label/xxxxx.png
for path in paths:
img = Image.open(path)
# 将图片转为一个二维数组(480*854)
img_array = np.array(img)
# 宽度为854
width = len(img_array[0])
# 高度为480
height = len(img_array)
for i in range(height):
for j in range(width):
if (img_array[i][j] == 1):
img_array[i][j] = 255
print(img_array)
# 将数组又转回图片
new_img = SimpleITK.GetImageFromArray(img_array)
#改造后的图片存放的路径,就是将原图路径的label替换成new_label
new_path=path.replace("label","new_label")
# 保存这张新图片
SimpleITK.WriteImage(new_img, new_path)
一种更简洁的实现方法:
import glob
import os
import cv2
#返回的是一个列表[xxx/label/xxx.png,xxx/label/xxx.png,xxx/label/xxx.png....]
paths=glob.glob(os.path.join("D:\label","*.png"))
#path比如说是..../label/xxxxx.png
for path in paths:
new_path = path.replace("label", "new_label")
img = cv2.imread(path)
cv2.imwrite(new_path,img*255)
转换前:
转换后:
对应的原图: