代码编织梦想

问题

  • 将labelme标注的分割目标转化为png/jpg格式的二值化分割图像
  • labelme标注的文件是json文件,里面包括每个点的坐标
      {
        "version": "5.0.1",
        "flags": {},
        "shapes": [
          {
            "label": "1",
            "points": [
              [
                256.90697674418607,
                175.8139534883721
              ],
              [
                251.32558139534888,
                195.34883720930233
              ],
              [
                243.4186046511628,
                219.06976744186048
              ],
              [
                229.93023255813955,
                248.8372093023256
              ],
              [
                204.34883720930233,
                313.48837209302326
              ],
              [
                128.06976744186048,
                474.8837209302326
              ],
              [
                145.27906976744185,
                476.27906976744185
              ],
              [
                219.2325581395349,
                310.69767441860466
              ],
              [
                264.34883720930236,
                266.51162790697674
              ],
              [
                270.8604651162791,
                266.51162790697674
              ],
              [
                280.6279069767442,
                249.30232558139537
              ],
              [
                277.37209302325584,
                241.86046511627907
              ],
              [
                274.58139534883725,
                215.8139534883721
              ],
              [
                266.2093023255814,
                232.09302325581396
              ],
              [
                270.8604651162791,
                241.86046511627907
              ],
              [
                257.8372093023256,
                260.4651162790698
              ],
              [
                229.46511627906978,
                291.6279069767442
              ],
              [
                255.04651162790697,
                250.2325581395349
              ],
              [
                262.95348837209303,
                238.13953488372093
              ],
              [
                277.8372093023256,
                204.6511627906977
              ],
              [
                278.30232558139534,
                191.16279069767444
              ],
              [
                288.0697674418605,
                176.27906976744185
              ],
              [
                280.6279069767442,
                171.62790697674419
              ],
              [
                268.5348837209302,
                188.8372093023256
              ],
              [
                268.06976744186045,
                207.4418604651163
              ],
              [
                249.46511627906978,
                244.18604651162792
              ],
              [
                216.4418604651163,
                300.93023255813955
              ],
              [
                239.2325581395349,
                244.6511627906977
              ],
              [
                258.30232558139534,
                198.13953488372093
              ],
              [
                256.90697674418607,
                191.62790697674419
              ],
              [
                263.8837209302326,
                174.4186046511628
              ]
            ],
            "group_id": null,
            "shape_type": "polygon",
            "flags": {}
          }
        ],
        "imagePath": "../pics/123.jpg",
        "imageData": "....",
        "imageHeight": 480,
        "imageWidth": 640
      }```
    
    
    

方法

  • 使用opencv-python中的函数:cv2.fillPoly()

    def fillPoly(img: Mat, pts, color, lineType=..., shift=..., offset=...) -> typing.Any:
    

应用

  • 使用Python,以及opencv-python库

     import json  
     import numpy as np
     import cv2
     
     ## 获取分割点
     contours = []
     with open('a.json', 'r') as f_r:
         result = json.load(f_r)
         for shape in result['shapes']:
             ## 注意:数值的类型为 np.int32
             points = np.array(shape['points'], dtype=np.int32)
             ## 注意:分割点的格式
             points = points.reshape(len(points), 1, 2)
             contours.append(points)
             
     ## 转换为二值图像 
     img = np.zeros((480,640,3))
     for cnt in contours:
         fgmask = cv2.fillPoly(img, [cnt], color=(255, 255, 255))
     cv2.imwrite('a.jpg', fgmask) 
    
  • 转化后的二值图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40541102/article/details/129820711

【转】tensorflow 训练 mask r-cnn 模型_mein_augenstern的博客-爱代码爱编程_tensorflow mask rcnn

转自:https://www.jianshu.com/p/27e4dc070761 TensorFlow 训练 Mask R-CNN 模型  公输睚信 关注  0.9 2018.08.25 20:50* 字数 2403 阅读 14401评论 104喜欢 34         前面的文章 TensorFlow 训练自己的目标检测器 写作的时候,Ten

VisDrone数据集 | 用CenterNet跑通VisDrone数据集(python、ubuntu)-爱代码爱编程

使用CenterNet跑通VisDrone数据集 一、转格式:Visdrone数据集转成coco格式第一步:把VisDrone的txt标注格式转换成Voc的xml格式第二步,检验一下所转换的xml格式画回原图中是否准确第三步,将xml格式转换成json格式第四步,检查json格式转换的是否正确(即,将转换的数据画回原图中)二、直接VisdroneD

语义分割之 标签生成-爱代码爱编程

语义分割之 标签生成 一. Labelme 生成工具单张生成二. Labelme 生成工具批量生成三. 自己写代码生成标签图像1. 提取图形类型与点坐标并画图2. 生成标签图像和可视化图像3. 批量生成4. 其他功能 在 语义分割之 json 文件分析 中分析了标注后生成的 json 文件, 接下为就可以生成标签图像了 假设你标注的图像放到了

json转voc数据集,eiseg json转voc__jacksparrow的博客-爱代码爱编程

此案例是用eiseg 保存的json转成voc掩码图片,如果是labelme 只需修改部分代码 主要核心函数:cv2.fillPoly 不懂的自行百度吧, 需要批量的自行添加 # -*- coding: utf-8 -*- import json import cv2 import numpy as np def cvt_one(json_path

python毕业设计推荐-爱代码爱编程

今天给大家推荐4个基于python的毕业设计/课程设计 1 网上商城系统 这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。

在 python 中获取单成员集合中的唯一元素-爱代码爱编程

Python 中要获取单成员集中的唯一元素: 使用 iter() 函数从集合中获取迭代器。使用 next() 函数从迭代器中获取元素。如果集合为空,请指定默认值。 my_set = {'jiyik.com'} elem

php初级教程------------------(4)-爱代码爱编程

目录 常用系统函 1)有关输出的函数 2)有关时间的函数 3)有关数学的函数 4)有关函数的函数 错误处理 错误分类 错误代号 错误触发          错误显示设置          错误日志设置          自定义错误处理 字符串类型          字符串定义语法      

# python中使用redis-爱代码爱编程

python中使用redis 连接 import redis r = redis.Redis(host="127.0.0.1", port=6379, decode_responses=True) 或者可以用redi

【lane】ultra-爱代码爱编程

引言 笔者Ultra-Fast-Lane-Detection专栏链接🔗导航: 【Lane】 Ultra-Fast-Lane-Detection 复现【Lane】Ultra-Fast-Lane-Detection(1)自定

labelme的使用-爱代码爱编程

主要内容 一、安装步骤二、示例步骤演示三、对labelme的标签结果进行验证四、Labelme分割标注软件使用 一、安装步骤 在自己的新建的虚拟环境中,安装以下包 1. pip install l

python正则表达式_python正则匹配单词-爱代码爱编程

Python正则表达式是一种强大的工具,用于在字符串中查找和匹配特定模式的文本。在Python中,可以使用re模块来使用正则表达式。正则表达式是一种模式匹配语言,可以在文本中寻找特定模式的字符串。正则表达式可以用于验证输入,搜索和替换文本等。 基本语法 正则表达式由一些字符和特殊字符组成。其中一些特殊字符是: .:匹配任何字符^:匹配字符串的开头$:

python数据分析三剑客(numpy,pandas , matplotlib)_pandas,numpy,matplotlib三个库的特点-爱代码爱编程

一:什么是NumPy? NumPy是一个Python库,旨在有效地处理Python中的数组。它快速、简单易学且存储高效。NumPy致力于提供比典型Python列表快50倍的数组对象,它还改进了流程处理数据的方式。Numpy是Python 中列表和数组的替代方案,NumPy 使用很少的内存,使用 NumPy 执行数学运算,使用 NumPy 处理多维数组。N

python语言的数据结构_python数据结构-爱代码爱编程

    🎂在我们的Python语言当中所谓的数据结构其实就是一些存储数据的类型。就比如说我们C语言当中的数组和结构体一样。我们Python语言当中的数据类型包括列表,元组,字典,集合,字符串五种形式。我们使用这四种不同的数据类型可以对数据进行不同的处理操作。接下来我们就依次来认识一下Python语言中的数据类型。     🍫1.列表     🎂列表可以

python参数类型定义、私有函数与变量、全局变量_python 私有函数-爱代码爱编程

  函数的参数类型定义 参数名 + 冒号 + 类型函数函数定义在Python3.7之后可用函数不会对参数类型进行验证 def add(a:int, b:int=3): print(a + b) add(1, 2) add('hello', 'xiaomu') def test(a:int, b:int=3, *args:int, **kwa