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 haimport json
import shutilfrom qtconsole.mainwindow import background###逻辑是这样的
# 初始化时 输入 labelme标注的文件夹目录,和 类别列表
# 在项目目录下生成两个文件夹,一个是test_images, 一个是对应的marks_folder也就是标签图片
class gen_marks_image():def __init__(self,path,label_list):   #初始化时,需传入文件的路径self.path = pathself.label_list = label_listdef 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_filesdef 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的columnrow_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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从技术债务到架构升级,滴滴国际化外卖的变革

背 景 商家营销简述 在外卖平台的运营中,我们致力于通过灵活的补贴策略激励商家,与商家共同打造良好的合作关系,也会提供多样化的营销活动,帮助商家吸引更多用户下单。通过这些活动,不仅能够提高商家的销量&#xff0c…

英语—四级CET4考试—技巧篇—选词填空—实操教学—2014 年 6 月大学英语四级考试真题(第 2 套)

🏠个人主页:fo安方的博客✨ 💂个人简历:大家好,我是fo安方,目前中南大学MBA在读,也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。🐳 &…

线性代数中的正交和标准正交向量

在线性代数中,理解正交向量和正交向量至关重要,尤其是对于机器学习中的应用。这篇博文将简化这些概念,而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零,则认为这两个向量是正交的。但点积到底是什么呢&am…

企业文件共享中的权限管理与安全风险防范

在企业的日常运营中,文件共享是必不可少的一项工作。然而,文件共享过程中如果权限管理不当,极易引发安全风险,导致企业敏感信息泄露。因此,加强文件共享中的权限管理与安全风险防范,对于保障企业信息安全至…

急停信号的含义

前言: 大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发C#的运动控制程序的时候,一个必要的步骤就是确认设备按钮的急停…

数据结构:图;邻接矩阵和邻接表

邻接矩阵: 1.概念: 邻接矩阵是图的存储结构之一,通过二维数组表示顶点间的连接关系。 2.具体例子 : 一.无向图邻接矩阵示例: 示例图(顶点:A、B、C,边:A-B、B-C&…

Kubernetes-master 组件

以下是Kubernetes Master Machine的组件。 etcd 它存储集群中每个节点可以使用的配置信息。它是一个高可用性键值存储,可以在多个节点之间分布。只有Kubernetes API服务器可以访问它,因为它可能具有一些敏感信息。这是一个分布式键值存储,所…

【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】

老铁们好!今天我们要来一场长达两万字的超详细技术探险,我会像拆解乐高积木一样把前馈神经网络(Feedforward Neural Network)的每个零件摆在台面上,用最接地气的方式让你彻底搞懂这个深度学习基石的工作原理。准备好了吗?我们开始吧! 第一章:神经网络的 “乐高积木” 1…

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…

【环境安装】重装Docker-26.0.2版本

【机器背景说明】Linux-Centos7;已有低版本的Docker 【目标环境说明】 卸载已有Docker,用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址:Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…

字节跳动后端二面

📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…

SpringBoot中使用MyBatis-Plus详细介绍

目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…

vue3读取webrtc-stream 视频流

一.首先下载webrtc-stream&#xff0c;方便自己本地搭建视频流服务 https://download.csdn.net/download/cyw8998/90373521 解压后&#xff0c;启动命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代码如下 <template><h1>video</h1><video id&…

vue3搭建实战项目笔记二

vue3搭建实战项目笔记二 2.1.git管理项目2.2.隐藏tabBar栏2.2.1 方案一&#xff1a;在路由元信息中设置一个参数是否显示tabBar2.2.2 方案二&#xff1a;通过全局设置相对定位样式 2.3.项目里封装axios2.3.1 发送网络请求的两种做法2.3.2 封装axios并发送网络请求2.3.2.1 对axi…

USC 安防平台之移动侦测

随着第四次科技革命的开启&#xff0c;AI技术获取了突飞猛进的发展&#xff0c;视频监控对应的视频分析技术也获取了巨大的发展。 还记得15年前采用人工提取特征做前景背景分离和提取&#xff0c;大部分依赖CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;开发难度…

Unity CommandBuffer绘制粒子系统网格显示

CommandBuffer是 Unity 提供的一种在渲染流程中插入自定义渲染命令的机制。在渲染粒子系统时&#xff0c;常规的渲染流程可能无法满足特定的渲染需求&#xff0c;而CommandBuffer允许开发者灵活地设置渲染参数、控制渲染顺序以及执行自定义的绘制操作。通过它&#xff0c;可以精…

【天地图】绘制、删除点线面

使用天地图绘制、删除点线面 实现效果图地图组件完整代码使用地图组件完整代码 实现效果图 地图组件完整代码 // 天地图组件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)

通过B站黑马程序员的八股文教学&#xff0c;自己也二刷了&#xff0c;结合ChatGpt、deepSeek总结了一下,Java八股文详细文档.2&#xff08;Redis篇和消息中间件篇&#xff0c;还没有写完&#xff0c;这只是一部分&#xff09; Java八股文详细文档.1&#xff08;包含JVM篇、数据…

简述 tsconfig.json 中 rootDir 和 include 之间的关系

tsconfig.json 中的 rootDir 和 include 之间有一定的关系&#xff0c;但它们的作用是不同的。理解它们的关系可以帮助你更好地配置 TypeScript 项目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 编译器&#xff08;tsc&#xff09;的“根目录”。它的主要作用是&#x…

如何在Spring Boot中使用Profiles实现环境隔离

文章目录 如何在Spring Boot中使用Profiles实现环境隔离什么是Spring Profiles1.基本概念2.配置管理3.使用场景4.条件化配置5.优点Spring Profiles的基础知识1.Profile的定义2.配置文件3.激活Profiles4.条件化配置5.Profile的优先级与合并6.Profiles的最佳实践配置文件的组织1.…