当前位置: 首页 > news >正文

python+halcon 解读labelme标注生成marksimage

这一段代码封装了一个类,需要传统一个图片和标注后json文件所在的地址,标注的选项是polygon,主要是用于unet深度学习网络
在初始化时需要输入文件(image+jeson)路径,多分类任务的label_list。会在项目目录下生成一个test_images文件夹,和marks_folder的文件夹
marks_image的制作使用halcon完成的,方便后期自己项目使用。欢迎交流
import os
import numpy as np
import halcon as ha

import json
import shutil

from qtconsole.mainwindow import background


###逻辑是这样的
# 初始化时 输入 labelme标注的文件夹目录,和 类别列表
# 在项目目录下生成两个文件夹,一个是test_images, 一个是对应的marks_folder也就是标签图片
class gen_marks_image():
    def __init__(self,path,label_list):   #初始化时,需传入文件的路径
        self.path = path
        self.label_list = label_list

    def get_list_in_path(self):
        name_files = os.listdir(self.path)
        json_files = []
        for name in name_files:
            if name.endswith('.json'):
                json_files.append(os.path.join(self.path, name))

        return json_files

    def create_folder(self,json_files):
        image_folders = "test_images"
        marks_folder = "marks_folder"
        if not os.path.exists(image_folders):
            os.mkdir(marks_folder)
        if not os.path.exists(marks_folder):
            os.mkdir(marks_folder)

        for json_1 in json_files:
            json_name=os.path.split(json_1)[-1]
            image_path = os.path.join(self.path, json_name.replace('.json','.jpg'))
            shutil.copy(image_path, image_folders)   #完成了对itest_image向test_images文件夹的复制

            ###根据原图生成以0填充的灰度图
            image00=ha.read_image(image_path)
            width,height =ha.get_image_size(image00)
            image_marks0 = ha.gen_image_const("byte",int(width[0]),int(height[0]))

            ###开始绘制marks_image图
            with open(json_1,"r") as f:
                json_data = json.load(f)
            print(json_data["shapes"])
            for shape in json_data["shapes"]:
                label0 =shape["label"]
                ####在这里我们输入一个label的list列表,如果是多分类的话,通过label在label_list中的位置定义它的灰度值
                gray =self.label_list.index(label0)  #car对应1,dog对应2 作为他们的灰度值

                ####在这里开始绘制区域
                points = shape["points"]
                row_points=[]
                col_points=[]
                for point in points:
                    #这里注意lableme的x——对halcon的column
                    row_points.append(int(point[1]))
                    col_points.append(int(point[0]))
                    print(row_points,col_points)

                #在这里要注意,polygon的首尾要接上。
                row_points.append(row_points[0])
                col_points.append(col_points[0])
                region = ha.gen_region_polygon(row_points,col_points)

                print(gray)
                image_marks0 = ha.paint_region(region,image_marks0,gray,'fill')
                ha.write_image(image_marks0,'jpg',0,marks_folder+"/"+json_name.replace('.json','.jpg'))



    def forward(self):
        json_files = self.get_list_in_path()
        print(json_files)
        self.create_folder(json_files)


#使用过程其实很简单
if __name__ == '__main__':
    path = r'C:\Users\Administrator\Desktop\test_image'
    label_list = ['back', 'car', 'dog', 'cat']
    gen_marks_image(path,label_list).forward()

相关文章:

  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十九节】
  • Jetpack Compose系列教程之(10)——State及remeber
  • MySQL的SQL执行流程
  • 机器学习(四)
  • 智能车摄像头开源—8 元素处理
  • 【FastAPI】8.FastAPI结合Jinja2模板完成一个待办列表
  • 【数据结构-并查集】力扣721. 账户合并
  • Pycharm 2024在解释器提供的python控制台中运行py文件
  • DDD该怎么去落地实现(3)通用的仓库和工厂
  • 用大模型学大模型04-模型可视化与数据可视化
  • [数据结构]二叉搜索树详解
  • Spring——Spring开发实战经验(4)
  • SpringBoot 的核心只有几张图
  • Ubuntu 24.04.1 LTS 本地部署 DeepSeek 私有化知识库
  • C语言中的强制类型转换:原理、用法及注意事项
  • 1.buuctf [BJDCTF2020]EasySearch
  • Hadoop之HDFS的使用
  • 从零开始:Gitee 仓库创建与 Git 配置指南
  • 服务器硬件知识--------linux系统初识and安装
  • Linux csplit 命令实现日志文件的拆分
  • 顺利撤离空间站,神十九乘组踏上回家之旅
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长
  • 历史新高!上海机场一季度营收增至31.72亿元,净利润增34%
  • 葡萄牙总理:未来几小时内将全面恢复供电
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?
  • 庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会隆重举行,习近平发表重要讲话