将黑色mask图片转为彩色标注文件

25 篇文章 6 订阅
17 篇文章 12 订阅

从黑色掩码图片可视化为彩色标注图像        

  1. 读取文件夹中的图片信息,生成csv文档
  2. 从csv文档中一次读取一个对象
  3. 批量生成可视化文件 

1、读取文件夹中的图片信息,生成csv文档

 只需修改地址信息及存入文档信息

image_mask.py

import os
import csv
import re

# 要读取的文件的根目录
# root_path = 'LoveDA/Train/Urban/masks_png' #待读取的训练集地址
root_path = 'G:/LoveDA/Val/Urban/masks_png'  #待读取的验证集地址

# 将所有目录下的文件信息放到列表中
def get_Write_file_infos(path):
    # 文件信息列表
    file_infos_list = []
    # 遍历并写入文件信息
    for root, dirnames, filenames in os.walk(path):

        for filename in filenames:
            file_infos = {}
            # dirname = root
            # dirname = re.findall(r'val\\(.+)', dirname)
            # 正则表达式来截取文件夹名称
            # 正则表达式还得学习
            filename1 = filename.split('.png')[0]
            file_infos["file"] = filename1
            # file_infos["species"] = dirname[0]
            # file_infos["图片"] = ''

            # 将数据追加字典到列表中
            file_infos_list.append(file_infos)

    return file_infos_list


# 写入csv文件
def write_csv(file_infos_list):
    # with open('data1.csv', 'a+', newline='') as csv_file:  #读取的训练集名称存入data1
    with open('data2.csv', 'a+', newline='') as csv_file:    ##读取的训练集名称存入data2
        # csv_writer = csv.DictWriter(csv_file, fieldnames=['file', 'species'])
        csv_writer = csv.DictWriter(csv_file, fieldnames=['file'])
        csv_writer.writeheader()
        for each in file_infos_list:
            csv_writer.writerow(each)


# 主函数
def main():
    # 调用获取文件信息的函数
    file_infos_list = get_Write_file_infos(root_path)
    # 执行写入程序
    write_csv(file_infos_list)


# 主程序入口

if __name__ == '__main__':
    main()


补充:生成list文档的代码如下:

import fnmatch
import os
import pandas as pd
import numpy as np
import sys


InputStra = 'LoveDA/Train/Urban/masks_png' #待读取文件的地址
InputStrb = '*.png'  #在每个名字后,加入png后缀

def ReadSaveAddr(Stra,Strb):
    #print(Stra)
    #print(Strb)
    print("Read :",Stra,Strb)
    a_list = fnmatch.filter(os.listdir(Stra),Strb)
    print("Find = ",len(a_list))
    df = pd.DataFrame(np.arange(len(a_list)).reshape((len(a_list),1)),columns=['Addr'])
    df.Addr = a_list
    #print(df.head())
    df.to_csv('data1',columns=['Addr'],index=False,header=False)
    print("Write To data1 !")

ReadSaveAddr(InputStra,InputStrb)

2、从csv文档中一次读取一个对象

csvread.py

import csv
import os
# 读取数据
import pandas as pd
# data = pd.read_csv("data1.csv",header=None)   
data = pd.read_csv("data1.csv")  #直接将csv表中的第一行当作表头  训练集
# print(data)

# ①获取所有列,并存入一个数组中
import numpy as np
data = np.array(data)
# print(data)
# [[1366]
#  [1367]
#  [1368]
#  ...
#  [2519]
#  [2520]
#  [2521]]  二维数组

for element in data:   #element=[3066]
    ele_str = str(element[0])  #首先读取二维数组,element是一维数组,读取里面的元素,然后转为字符串形式

3、生成可视化文件 

render.py

from PIL import Image
import numpy as np

COLOR_MAP = dict(
    IGNORE=(0, 0, 0),
    Background=(255, 255, 255),
    Building=(255, 0, 0),
    Road=(255, 255, 0),
    Water=(0, 0, 255),
    Barren=(159, 129, 183),
    Forest=(0, 255, 0),
    Agricultural=(255, 195, 128),
)


def render(mask_path, vis_path):
    new_mask = np.array(Image.open(mask_path)).astype(np.uint8)
    cm = np.array(list(COLOR_MAP.values())).astype(np.uint8)
    color_img = cm[new_mask]
    color_img = Image.fromarray(np.uint8(color_img))
    color_img.save(vis_path)


if __name__ == '__main__':
    mask_path = r'G:\LoveDA\Train\Urban\masks_png\1366.png'  #待读取的地址(str)
    vis_path = r'C:\Users\28123\Desktop\1366_vis.png'  #存入的文档
    render(mask_path, vis_path) 

4、批量生成!!!

csvread.py 

难点:从csv中读取对象,转为数组,然后再转为字符串,形成路径,再从路径中获取图片。 

import csv
import os
# 读取数据
import pandas as pd
data = pd.read_csv("data1.csv")  #直接将csv表中的第一行当作表头,有一个‘file’对象


# ①获取所有列,并存入一个数组中
import numpy as np
data = np.array(data)

from PIL import Image
import numpy as np
COLOR_MAP = dict(
        IGNORE=(0, 0, 0),
        Background=(255, 255, 255),
        Building=(255, 0, 0),
        Road=(255, 255, 0),
        Water=(0, 0, 255),
        Barren=(159, 129, 183),
        Forest=(0, 255, 0),
        Agricultural=(255, 195, 128),
    )


def render(mask_path, vis_path):
    new_mask = np.array(Image.open(mask_path)).astype(np.uint8)
    cm = np.array(list(COLOR_MAP.values())).astype(np.uint8)
    color_img = cm[new_mask]
    color_img = Image.fromarray(np.uint8(color_img))
    color_img.save(vis_path)



# 遍历数组
root = 'G:\\LoveDA\\Train\\Urban\masks_png\\'
root_vis = 'G:\\LoveDA\\Train\\Urban\\masks_vis\\'

for element in data:
    ele_str = str(element[0])
    if __name__ == '__main__':
        path_root = os.path.join(root, ele_str + '.png')
        vis_root = os.path.join(root_vis, ele_str + '.png')
        mask_path = path_root
        vis_path = vis_root
        render(mask_path, vis_path)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值