【mask转json】文件互转

mask图像转json文件

当只有mask图像时,可使用下面代码得到json文件

import cv2
import os
import json
import sys
 
 
def func(file:str) -> dict:
    png = cv2.imread(file)
    gray = cv2.cvtColor(png, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray,10,255,cv2.THRESH_BINARY)
    contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 
    dic = {
   "version": "5.0.1", "flags": {
   },"shapes":list(), "imagePath":os.path.basename(file),
            "imageHeight":png.shape[0], "imageWidth":png.shape[1]}
    for contour in contours:
        temp = list()
        for point in contour[2:]:
            if len(temp) > 1 and temp[-2][0] * temp[-2][1] * int(point[0][0]) * int(point[0][1]) != 0 and (int(point[0][0]) - temp[-2][0]) * (
                            temp[-1][1] - temp[-2][1]) == (int(point[0][1]) - temp[-2][1]) * (temp[-1][0] - temp[-1][0]):
                temp[-1][0] = int(point[0][0])
                temp[-1][1] = int(point[0][1])
            else:
                temp.append([int(point[0][0]), int(point[0][1])])
        dic["shapes"].append({
   "label": "result", "points":temp, "group_id": None,
                                "shape_type": "polygon", "flags": {
   }})
 
    return dic
 
 
if  __name__ == "__main__":
 
    if len(sys.argv) != 3:
        raise ValueError("mask文件或目录 输出路径")
 
    if os.path.isdir(sys.argv[1]):
        for file in os.listdir(sys.argv[1]):
            with open(os.path.join(sys.argv[2], os.path.splitext(file)[0]+".json"), mode='w', encoding="utf-8") as f:
                json.dump(func(os.path.join(sys.argv[1], file)), f)
    else:
        with open(os.path.join(sys.argv[2], os.path.splitext(os.path.basename(sys.argv[1]))[0]+".json"), mode='w', encoding="utf-8") as f:
            json.dump(func(sys.argv[1]), f)

json文件转mask图像

只有json文件时,可使用下面代码得到mask图像

import cv2
import json
import numpy as np
import os
import sys
 
 
def func(file:str) -> np.ndarray:
    with open(file, mode='r', encoding="utf-8") as f:
        configs = json.load(f)
    shapes = configs["shapes"]
 
    png = np.zeros((configs["imageHeight"], configs["imageWidth"], 3), np.uint8)
 
    for shape in shapes:
        cv2.fillPoly(png, [np.array(shape["points"], np.int32)], (0,0,255))
 
    return png
 
 
if  __name__ == "__main__":
 
    if len(sys.argv) != 3:
        raise ValueError("json文件或目录 输出路径")
 
    if os.path.isdir(sys.argv[1]):
        for file in os.listdir(sys.argv[1]):
            cv2.imwrite(os.path.join(sys.argv[2], os.path.splitext(file)[0]+".png" ), func(os.path.join(sys.argv[1], file)))
    else:
        cv2.imwrite(os.path.join(sys.argv[2], os.path.splitext(os.path.basename(sys.argv[1]))[0]+".png"), func(sys.argv[1]))

使用方法:在命令行中输入
python json_to_mask.py 文件夹或json文件 输出文件夹
python mask_to_json.py 文件夹或mask图片 输出文件夹
如果输入文件夹,则会将文件夹下所有json文件或mask图片转成对应文件输出到指定路径中。

来源:Mask图像与json文件相互转换
感谢大佬!

相关推荐

  1. maskjson文件

    2023-12-19 06:20:06       79 阅读
  2. QT : Bson\Json

    2023-12-19 06:20:06       66 阅读
  3. vue json字符串和Hex

    2023-12-19 06:20:06       39 阅读
  4. FastJson==xml与json格式工具类

    2023-12-19 06:20:06       26 阅读
  5. 【matlab】如何将.mat文件与.nii文件

    2023-12-19 06:20:06       46 阅读
  6. python使用pandas实现dict与excel文件

    2023-12-19 06:20:06       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 06:20:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 06:20:06       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 06:20:06       82 阅读
  4. Python语言-面向对象

    2023-12-19 06:20:06       91 阅读

热门阅读

  1. Linux 命令大全备忘录

    2023-12-19 06:20:06       70 阅读
  2. 基于三维点云处理技术的工件识别和匹配

    2023-12-19 06:20:06       59 阅读
  3. LeetCode day26

    2023-12-19 06:20:06       81 阅读