深度学习——自适应图片大小选择线宽和字体大小

不知道大家在可视化检测结果时是否会有设置的线宽太小在图片上画出来的框看不清楚,写的字符串看不清楚的烦恼。我发现不论是什么大小的图片,使用yolov5可视化线宽和字符串都能很清晰的显示出来,我根据yolov5上面的可视化代码,改写了这个draw_box函数能实现自适应图片大小选择线宽和字体大小,从此不需要调整线宽和字体大小了;


def get_color(index):index = int(index) ** 11 + 11# L = R * 299 / 1000 + G * 587 / 1000 + B * 114 / 1000return index * 299 % 255, index * 587 % 255, index * 114 % 255def draw_box(image_bgr, preds, names):"""@param image_bgr: 原图@param preds: 预测结果,[[x1, y1, x2, y2, conf, cls], ...]@param names: 对应preds的类别名[...]@return:"""if len(preds) == 0:return image_bgr# 自适应图片大小计算线宽和文字大小# 图片大小img_h, img_w = image_bgr.shape[:2]# box线宽box_thickness = max(round(sum((img_h, img_w)) / 2 * 0.003), 2)# font_size = max(round(sum((img_h, img_w)) / 2 * 0.035), 12)# text线宽text_thickness = max(box_thickness - 1, 1)# text字体大小fontScale = box_thickness / 4.  # NOTE:如果嫌姿态太大把这个4修改为更大值就行,反之字体太小就改小# 字体fontFace = 0# 画框for i, (x1, y1, x2, y2, conf, cls) in enumerate(preds):x1, y1, x2, y2, cls = np.array([x1, y1, x2, y2, cls], np.int16)# 画框cv2.rectangle(image_bgr, pt1=(x1, y1),pt2=(x2, y2),color=get_color(cls),thickness=box_thickness, lineType=cv2.LINE_AA)# 在框上显示的texttext = f"{names[i]}:{conf:.2f}"# 用于计算特定文本字符串在给定字体和大小下的尺寸text_w, text_h = cv2.getTextSize(text=text,fontFace=fontFace,fontScale=fontScale,thickness=text_thickness)[0]# 防止写的text超过了上边界,导致看不到,如果能写外面就写外面outside_x = img_w - x1 - text_w  # 如果横着会导致文本超过图像边界,text向左挪一挪outside_y = y1 - text_h >= 5# 写文字cv2.putText(image_bgr, text=text,org=(x1 if outside_x >= 5 else x1 + outside_x - 5,  # 防止超过右边界y1 - 3 if outside_y else y1 + text_h + 5),  # 防止超过上边界fontFace=fontFace, fontScale=fontScale, thickness=text_thickness,color=get_color(cls))return image_bgr

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

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

相关文章

钡铼PLC集成BL121PO协议网关优化电子制造产线的生产效率

PLC转OPC UA协议转换网关BL121PO在电子制造产线中的优化应用,可以显著提高生产效率,促进生产线的智能化和信息化发展。本文将从以下几个方面进行阐述: 提高设备间通信效率:PLC转OPC UA协议转换网关BL121PO通过高效的协议转换&…

Flutter 中的 PositionedTransition 小部件:全面指南

Flutter 中的 PositionedTransition 小部件:全面指南 在 Flutter 中,PositionedTransition 是一个动画 widget,它允许你创建一个动画,使得一个子 widget 从屏幕的一个位置平滑过渡到另一个位置。这在实现各种动态布局变化时非常有…

SpringBoot基础篇

1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…

就说说开一家公司的流程和成本

本人在进互联网公司和外企前,也和一位老板合作做,在一家小微公司里做过技术负责人,所以也了解开办一家公司的流程以及公司运作的成本。 通过本文大家其实能看到创业的难度。具体来讲,开办并维持着一家公司,其实需要操…

使用python写一个程序,持续监控某个windows进程的活动信息,例如占用cpu比例、占用内存等

使用python写一个程序,持续监控某个windows进程的活动信息,例如占用cpu比例、占用内存等 要持续监控某个Windows进程的活动信息,如CPU和内存占用,你可以使用psutil库。如果你还没有安装这个库,你可以使用pip进行安装&…

Python开发 —— 变量、全局变量函数的参数传递

1. Python变量 1.1 变量的定义和使用 在Python中,变量不需要显式声明。通过赋值语句,变量会自动创建。例如: x 10 y "Hello, World!"在这段代码中,x 被赋值为整数10,而 y 被赋值为字符串 "Hello, W…

SpringCloudOpenFeign的详解

1. SpringCloud OpenFeign的特性 1. 概念 Feign是一个声明式web Rest服务客户端。它使编写web服务客户端更容易要使用Feign,请创建一个接口并对其使用注解进行标注它具有可插入注释支持,包括Feign注释和JAX-RS注释Feign还支持可插拔编码器和解码器Spri…

Day25

Day25 网络编程概念 计算机网络 网络编程:TCP协议的三次握手四次挥手 IP地址,端口号:取值范围:065535,保留端口号:01024。 网络协议:TCP协议(类比于打电话,双方需要连接…

项目构建工具maven

一、概述 1、maven是apache的一个开源项目,是一个优秀的项目构建/管理工具 2、apache(软件基金会、非盈利组织、管理维护一些开源项目) 二、功能 1、管理项目中jar包和jar包与jar包之间的依赖 2、完成项目编译、测试、打包 三、核心文件 pom.xml:在里面配置相…

信息学奥赛初赛天天练-14-阅读程序-字符数组、唯一分解定理应用

更多资源请关注纽扣编程微信公众号 1 2019 CSP-J 阅读程序1 (程序输入不超过数组或字符串定义的范围;判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分) 1 输入的字符串只能由小写字母或大写字母组…

Redis的非关系型数据库

第七天课堂笔记 今日目标 非关系型数据库(nosql【not only SQL】数据库) Redis的非关系型数据库 Redis的安装和配置 Redis常见数据类型 Redis特性 nosql数据库 not only sql数据库,非关系型数据库,往往采用类似于json来存储数…

【大宗】第一期:大航海时代下的[集运欧线]

一、大航海时代 - 集运欧线前世今生 01 航运合约指数的诞生 ‍‍‍‍ 2023年8月18日,上海期货交易所的伙伴们搞了个大新闻——他们推出了一种新的期货品种,叫做“欧线集运”。这可不是什么普通的期货,它是基于一个叫做SCFIS的指数&#xf…

上海汇正财经官网怎么样?客户好评如潮,口碑赞誉之声不绝于耳

在财经服务领域,客户评价是衡量一家企业信誉和服务质量的重要标准。上海汇正财经作为业内知名的财经服务平台,以其优质的服务赢得了广大客户的认可和好评。大量正面用户评价和成功服务的案例,充分证明了上海汇正财经是一个值得信赖的正规企业…

每日两题 / 131. 分割回文串 42. 接雨水(LeetCode热题100)

131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09; 数据量较小&#xff0c;考虑直接暴力&#xff0c;每次dfs&#xff1a;以bg作为左区间&#xff0c;往右遍历&#xff0c;找到一段回文串区间后&#xff0c;将回文串插入vector<string>&#xff0c;并以下一个下标…

段位在于面对人性之恶,一笑而过

这个小哥哥不知道是哪里不对劲了&#xff0c;突然给我留言说我在骗流量&#xff0c;骗关注。公众号是我的&#xff0c;文章是我写的&#xff0c;主要分享的就是我创业的一些接单案例&#xff0c;因为之前收到很多无效的留言&#xff0c;寻求合作就几个字我不想接收无效信息&…

Day18学习Java

File - 文件类 File&#xff0c;是文件和目录路径名的抽象表示。 File只关注文件本身的信息&#xff0c;而不能操作文件里面的内容。 File类 – 表示文件或文件夹&#xff0c;不能对文件里的数据进行操作。 对文件里的数据进行操作的是&#xff1a;IO流。 需求1&#xff1a;通…

Unity 权限 之 Android 【权限 动态申请】功能的简单封装

Unity 权限 之 Android 【权限 动态申请】功能的简单封装 目录 Unity 权限 之 Android 【权限 动态申请】功能的简单封装 一、简单介绍 二、Android 权限 动态申请 三、实现原理 四、注意事项 五、案例实现简单步骤 附录&#xff1a; 一、进一步优化 二、多个权限申请…

第三方软件检测机构要具备哪些资质要求?专业测试报告如何申请?

第三方软件检测机构是独立于软件开发商和用户之外的公正机构&#xff0c;负责对软件进行全面的检测和评估。其独立性保证了评测结果的客观性和公正性&#xff0c;有效避免了软件开发商对自身产品的主观偏见和误导。 要成为一家合格的第三方软件检测机构&#xff0c;需要具备一…

网络编程——多进程的服务器

多进程的网络服务器 多进程的网络服务器是一种使用多个进程来处理并发网络请求的服务器架构。在这种架构中&#xff0c;服务器在接收到客户端连接请求后&#xff0c;会创建一个新的子进程来处理该请求&#xff0c;从而允许服务器同时处理多个客户端连接。多进程服务器通常用于…

OKR 实践:来自一位信息技术部主管的成功秘诀

OKR 实践&#xff1a;来自一位信息技术部主管的成功秘诀 为什么选择OKR 公司信息技术部为38个各地分公司、12,000名员工的IT需求提供服务。庞大而多样的客户群常常使我们的团队分散&#xff0c;许多团队都在各自为政&#xff0c;以个案为基础解决问题&#xff0c;而不是采用企业…