labelme的使用
打开labelme
- 在anaconda prompt中输入
labelme
利用labelme获得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为你自己的文件夹路径