labelme分割json转换成mask二值图

第一步:

# -*- coding:utf8 -*-
import os

json_folder = r"D:\ai\UNetTraining_SingleSpermSelection\train"
#  获取文件夹内的文件名
FileNameList = os.listdir(json_folder)
#  激活labelme环境
os.system("activate labelme")
for i in range(len(FileNameList)):
    #  判断当前文件是否为json文件
    if (os.path.splitext(FileNameList[i])[1] == ".json"):
        json_file = json_folder + "\\" + FileNameList[i]
        #  将该json文件转为png
        os.system("labelme_json_to_dataset " + json_file)

第二步:


import os
import shutil

# 定义源目录和目标目录
source_dir = r"D:\ai\UNetTraining_SingleSpermSelection\dir_output"
target_dir_img = r"D:\ai\UNetTraining_SingleSpermSelection\finally_output\img"
target_dir_mask = r"D:\ai\UNetTraining_SingleSpermSelection\finally_output\mask"

# 获取目录中的所有文件夹名称
dir_names = os.listdir(source_dir)

for dir_name in dir_names:
    # 构建完整的文件夹路径
    full_dir_path = os.path.join(source_dir, dir_name)

    # 分割文件夹名称以获取新文件名的一部分
    parts = dir_name.split('_')
    new_file_base = '_'.join(parts[:9])

    # 定义新的文件名
    new_img_name = f"{new_file_base}.png"
    new_mask_name = f"{new_file_base}.bmp"

    # 定义原始和新的文件路径
    old_img_path = os.path.join(full_dir_path, "img.png")
    old_mask_path = os.path.join(full_dir_path, "label.png")
    new_img_path = os.path.join(full_dir_path, new_img_name)
    new_mask_path = os.path.join(full_dir_path, new_mask_name)

    try:
        # 重命名文件
        os.rename(old_img_path, new_img_path)
        os.rename(old_mask_path, new_mask_path)

        # 移动文件到最终输出目录
        shutil.move(new_img_path, target_dir_img)
        shutil.move(new_mask_path, target_dir_mask)
    except Exception as e:
        print(f"Error processing {dir_name}: {e}")

第三步:

import cv2
import numpy as np
import scipy
import os


path_save_png = r"D:\ai\UNetTraining_SingleSpermSelection\finally_output\mask"
for im in os.listdir(path_save_png):
    img = cv2.imread(os.path.join(path_save_png, im))
    b, g, r = cv2.split(img)
    r[np.where(r != 0)] = 255
    cv2.imwrite(os.path.join(path_save_png, im), r)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
mask二值换为json主要包括以下几个步骤: 1. 读取mask二值:使用像处理库(如OpenCV)读取mask二值,并将其换为二维数组。二值由0和255组成,0代表背景,255代表前景。 2. 遍历二维数组:遍历二维数组中的每个像素点,判断该点是否为前景(255)。如果是前景,则记录该点的位置信息。 3. 构建json数据:创建一个空的json对象,并依次将每个前景点的位置信息添加到json对象中。可以用字典或列表的形式存储位置信息,例如使用字典存储时,字典的key可以表示点的序号,value则包含该点的横坐标和纵坐标。 4. 将json数据保存到文件:使用json库将json数据保存到文件中,可以选择将其以字符串形式保存,也可以将其以字典形式保存。 示例代码如下: ```python import cv2 import json def mask_to_json(mask_path, json_path): mask = cv2.imread(mask_path, 0) h, w = mask.shape[:2] json_data = {} # 创建空的json对象 for row in range(h): for col in range(w): if mask[row, col] == 255: # 判断该点是否为前景 json_data[(row, col)] = {'x': col, 'y': row} # 将前景点的位置信息添加到json对象中 with open(json_path, 'w') as f: json.dump(json_data, f) # 将json数据保存到文件中 mask_to_json('mask.png', 'mask.json') ``` 上述代码中,`mask_path`为mask二值的路径,`json_path`为保存json数据的路径。代码会将mask二值中所有前景点的位置信息保存到json文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值