labelme的使用

labelme的使用

打开labelme

  • 在anaconda prompt中输入
labelme

pEt1SRU.png

  • labelme打开界面
    pEt1PsJ.png

利用labelme获得json文件

  • 打开目录文件
    pEt1EIx.png
    pEt1eJK.png
  • 利用labelme标注
    pEt1mRO.png
    • 先绘制多边形在标注标签
      pEt1KQe.png
      然后保存这样就会得到我们的json文件

json文件的操作

json文件转numpy文件

下面这个代码可以将json文件转换为numpy文件

import numpy as np
import cv2
import os
import json

def json_to_mask(img_path, json_path, mask_value=1):
    """生成掩码"""
    img = cv2.imread(img_path)   #读取图片
    if img is None:
        raise FileNotFoundError(f"图片读取失败: {img_path}")
    h, w = img.shape[:2]    #切片操作获取图片的高度和宽度
    mask = np.zeros((h, w), dtype=np.uint8)
    
    with open(json_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
        for shape in data.get('shapes', []):
            points = np.array(shape['points'], dtype=np.int32)
            cv2.fillPoly(mask, [points], color=mask_value)
    return mask
    def process_directory(json_folder_path,image_folder_path, mask_root, mask_value):
    os.makedirs(mask_root,exist_ok=True)
    for files in os.listdir(json_folder_path):
        if files.endswith('.json'):
            json_path = os.path.join(json_folder_path,files)
    for files in os.listdir(image_folder_path):
        if files.endswith('.jpg'):
            image_path = os.path.join(image_folder_path,files)
        base_name = os.path.splitext(files)[0]
        mask_path = os.path.join(mask_root, f"{base_name}.npy")
        mask = json_to_mask(image_path,json_path,mask_value)
        np.save(mask_path,mask)

利用process_directory函数可以批量转换json文件为numpy文件
输入是json文件夹路径,图片文件夹路径,输出文件夹路径,掩码标签
不过要注意的是json文件和图片文件的名字要对应上

json文件转图片

import os
import numpy as np
import matplotlib.pyplot as plt

# 定义包含 .npy 文件的文件夹路径
folder_path = "./numpy"
# 定义保存图像的文件夹路径
output_folder = "./images"

# 如果输出文件夹不存在,则创建它
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    if filename.endswith('.npy'):
        # 构建完整的文件路径
        file_path = os.path.join(folder_path, filename)
        # 从 .npy 文件中加载 numpy 矩阵
        matrix = np.load(file_path)

        # 显示矩阵对应的图像(可根据需要选择是否显示)
        plt.imshow(matrix, cmap='gray')
        # 关闭坐标轴
        plt.axis('off')

        # 构建输出图像的文件名
        output_filename = os.path.splitext(filename)[0] + '.png'
        output_path = os.path.join(output_folder, output_filename)

        # 保存图像
        plt.imsave(output_path, matrix, cmap='gray')
        # 关闭当前图像窗口,避免内存占用
        plt.close()

print("批量处理完成!")

如果需要用这个代码的话需要改变folder_path和output_folder为你自己的文件夹路径

效果展示

  • numpy文件
    由于我numpy文件是二进制文件没法通过编辑器直接打开,这里不进行展示
  • png文件
    pEtGkZj.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值