目标检测后的图像上绘制边界框和标签

效果如图所示,有个遗憾就是CV2在图像上显示中文有点难,也不想用别的了,所以改成了英文,代码在下面了,一定要注意一点,就是标注文件的读取一定要根据自己的实际情况改一下,我的所有图像的标注文件是一个XML文件。

import cv2
import os
import numpy as npdef draw_label_type(draw_img,bbox,label_color):label = str(bbox[-1])labelSize = cv2.getTextSize(label + '0', cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)[0]if bbox[1] - labelSize[1] - 3 < 0:# 在图像上绘制边界框cv2.rectangle(draw_img,(bbox[0], bbox[1] + 2),(bbox[0] + labelSize[0], bbox[1] + labelSize[1] + 3),color=label_color,thickness=-1)# 在图像中的边界框中打上标签cv2.putText(draw_img, label,(bbox[0], bbox[1] + labelSize[1] + 3),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0, 0, 0),thickness=1)else:# 在图像上绘制边界框cv2.rectangle(draw_img,(bbox[0], bbox[1] - labelSize[1] - 3),(bbox[0] + labelSize[0], bbox[1] - 3),color=label_color,thickness=-1)# 在图像中的边界框中打上标签cv2.putText(draw_img, label,(bbox[0], bbox[1] - 3),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0, 0, 0),thickness=1)cv2.rectangle(draw_img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), color=label_color, thickness=1)return draw_img# 读取标注文件
def read_data(data_name):image_label=[]with open(data_name, 'r') as f:for line in f:image_label.append(line)return image_labeldef spli_lab(word):labs = []while (len(word) > 10):tem = [int(word[-9]),int(word[-8]),int(word[-5]),int(word[-4]),word[-1]]labs.append(tem)word = word[:-10]return labsdef img_ann_ply(label):for lab in label:word = lab.split()#获取一张图象中的标签及位置# !!!!!怎们分离需要根据自己存储格式改变img_box = spli_lab(word)img_name = word[0][:-2]# 图像文件存储为.bmp。这里因为发现有的标间存储有bug设置了一个筛选if img_name[-1] != 'p':img_name = img_name[:-1]image = os.path.join(inputPath, img_name)# img = cv2.imread(image)img = cv2.imdecode(np.fromfile(image, dtype=np.uint8), -1)# 根据数据集中缺陷的不同设置边界框的颜色for box in img_box:if box[-1] == '"虫烂"':box_color = (255, 0, 0)box[-1] = 'Insect rot'elif box[-1] == '"内皮"':box_color = (0, 0, 255)box[-1] = 'endothelium'else:box_color = (0, 255, 0)box[-1] = 'charring'img = draw_label_type(img, box, box_color)#展示图像cv2.imshow("banliquexain", img)# 延时显示,如果想要键盘控制窗口的切换可将int数字改成0cv2.waitKey(60)#为了使窗口变得连续,我们将窗口销毁注销# cv2.destroyAllWindows()if __name__ == '__main__':inputPath = r"F:\project\*****\datasets_2000"dataset_root = r"F:\project\**\datasets_2000\DetectTrainData.txt"# 读取标注文件,注意!!!!!!# 这里的标注文件读取会因文件存储格式不同需要自己改动label=read_data(data_name=dataset_root)#把标注文件中每张图像分别标注并显示img_ann_ply(label)

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

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

相关文章

宠物赛道,用AI定制宠物头像搞钱项目教程

今天给大家介绍一个非常有趣&#xff0c;而粉丝价值又极高&#xff0c;用AI去定制宠物头像或合照的AI项目。 接触过宠物行业应该知道&#xff0c;获取1位铲屎官到私域&#xff0c;这类用户的价值是极高的&#xff0c;一个宠物粉&#xff0c;是连铲个屎都要花钱的&#xff0c;每…

基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

背景 前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移&#xff0c;但是在实际生产环境&#xff0c;我们在迁移到目标库之前还需要做一些过滤和转换工作&#xff1b;比如&#xff0c;在诗词数据迁移后&#xff0c;发现原来 MySQL 中…

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…

深入了解OpenStack:创建定制化QCOW2格式镜像的完全指南

OpenStack 创建自定义的QCOW2格式镜像 前言 建议虚机网络配置为 NAT 或 桥接&#xff0c;因为未来 KVM虚机 需要借助 虚机 的外网能力进行联网安装软件包 虚机在启动前&#xff0c;必须在 VMware Workstation 上为其开启虚拟化引擎 虚拟化 Intel VT-x/EPT 或 AMD-V 安装kvm …

Mybatis学习|第一个Mybatis程序

1.创建一个数据库以及一个用户表&#xff0c;并插入三条数据用来测试 2.创建一个空的maven项目 在pom.xml中导入本次测试用到的三个依赖&#xff0c;mysql驱动、mybatis依赖、以及单元测试junit依赖 将这个 空的maven项目当成一个父项目&#xff0c;再创建一个空的maven子项目用…

文件传输协议

文章目录 一、FTP1. 定义2. 端口3. 数据传输方式主动方式被动方式 二、TFTP三、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、FTP 1. 定义 文件传输协议&#xff08;FTP&#xff09;是一种用于在客户端和服务器之间进行文件传输的标准网络协…

【NLP】手把手使用PyTorch实现Transformer以及Transformer-XL

手把手使用PyTorch实现Transformer以及Transformer-XL Abstract of Attention is all you need使用PyTorch实现Transformer1. 构建Encoder-Decoder模型1.1 导入依赖库1.2 创建Encoder-Decoder类1.3 创建Generator类 2. 构建Encoder2.1 定义复制模块的函数2.2 创建Encoder2.3 构…

快手Java一面,全是基础

现在已经到了面试招聘比较火热的时候&#xff0c;准备面试的过程中&#xff0c;一定要多看面经&#xff0c;多自测&#xff01; 今天分享的是一位贵州大学的同学分享的快手一面面经。 快手一面主要会问一些基础问题&#xff0c;也就是比较简单且容易准备的常规八股&#xff0…

阿里云部署开源MQTT平台mosquitto的docker操作

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;广泛用于物联网和传感器网络中。Mosquitto是一个流行的开源MQTT代理&#xff0c;可以在Docker中进行配置和部署。本文将详细介绍如何在Docker中配置Mosquitto MQTT代理…

Qt+C++桌面计算器源码

程序示例精选 QtC桌面计算器源码 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC桌面计算器源码>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与…

Ansible-palybook学习

目录 一.playbook介绍二.playbook格式1.书写格式2.notify介绍 一.playbook介绍 playbook 是 ansible 用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。通过 playbook 的详细描述&#xff0c;执行其中的一系列 tasks &#xff0c;可以让远端主机达到预期的状态。pl…

如何利用人工智能实现软件测试的左移

在本文中&#xff0c;我们&#xff08;作者&#xff09;探讨了如何利用人工智能的力量&#xff0c;在软件测试领域实现左移。 用AI驱动的创新变革测试领域 测试在确保应用程序质量和可靠性方面发挥着至关重要的作用。然而&#xff0c;随着测试要求变得越来越复杂&#xff0c;人…