自学内容网 自学内容网

240719_图像二分类任务中图像像素值的转换-[0,255]-[0,1]

240719_图像二分类任务中图像像素值的转换-[0,255]-[0,1]

在做语义分割二分类任务时,有时下载到的数据集或者我们自己制作的数据集,标签像素值会是[0,255](或者含有一些杂乱像素),但在该类任务中,往往0代表背景,1,2……代表每个类别,我们是二分类,就需要把[0,255]转换成[0,1],以下是查看像素值的代码。

from PIL import Image
import numpy as np
# 打开图片文件
img = Image.open("D:\\mask255\\001.png")

# 将图像转换为 numpy 数组
data = np.array(img)

# 输出图像的像素矩阵
print(data)

此时如果使用的是pycharm,可以在第10行打断点,然后debug执行,点击下方监视窗口中的作为Array查看,就可以在右侧SciView中查看具体的像素值,不同的像素值会有颜色区分,例如图中1采用不同颜色。

image-20240719163855174

以下是一份解决该问题的代码:

from PIL import Image
import numpy as np
import os
'''
将[0,255]的二值图像转成可以训练的[0,1]二值图像
'''
if __name__ == '__main__':
    work_dir = "D:\\mask255"  # 原图像所在文件夹,请更换为你自己的路径
    output_dir = "D:\\mask1"  # 处理后图像保存的文件夹,请更换为你自己的路径
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)  # 如果输出文件夹不存在,则创建它

    file_names = os.listdir(work_dir)
    for file_name in file_names:
        file_path = os.path.join(work_dir, file_name)

        image = Image.open(file_path)
        img = np.array(image)
        img[img != 0] = 1

        # 重新保存到新文件夹
        image = Image.fromarray(img, 'L')
        new_name = file_name[:-4].strip("_Segmentation")  # 文件名处理
        output_path = os.path.join(output_dir, f"{new_name}.png")  # 新的保存路径

        image.save(output_path)  # 保存到指定的输出文件夹

注意这样处理完了之后可能肉眼观察照片就是一片黑(右图),因为0和1差距太小了,如果需要观察可以使用以下代码:

import cv2
import numpy as np
from PIL import Image

# 假设 binary_data 是你的二值化后的 numpy 数组
binary_data = np.array(Image.open("D:\\mask1\\007.png")) > 0  

# 将布尔数组转换为整数数组,以便于显示
binary_data = binary_data.astype(np.uint8) * 255

cv2.imshow('Binary Image', binary_data)  # 显示图像
cv2.waitKey(0)  # 等待按键,0表示无限等待
cv2.destroyAllWindows()  # 销毁所有窗口

image-20240719184806471


原文地址:https://blog.csdn.net/weixin_66378701/article/details/140554034

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!