目标检测预测框可视化python代码实现--OpenCV

import numpy as np 
import cv2
import colorsys
from PIL import Image, ImageDraw, ImageFontdef puttext_cn(img, text, pt, color=(255,0,0), size=16):if (isinstance(img, np.ndarray)):  # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))draw = ImageDraw.Draw(img)# 字体的格式fontStyle = ImageFont.truetype("simhei.ttf", size, encoding="utf-8")# 绘制文本draw.text(pt, text, color, font=fontStyle)# 转换回OpenCV格式return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)def plot_results1(image_path, bboxes_list, class_names_list):img = cv2.imread(image_path)for i in range(len(bboxes_list)):bbox = bboxes_list[i]left, top, right, bottom = bbox[0], bbox[1], bbox[2], bbox[3]class_name = class_names_list[i]class_index = class_names_list.index(class_name)# cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )# 参数表示依次为:(图片,长方形框左上角坐标, 长方形框右下角坐标,字体颜色,字体粗细)cv2.rectangle(img, (int(left),int(top)), (int(right),int(bottom)),  colors[int(class_index)], thickness=2)      label = class_name# cv2.getTextSize() 计算文本字符串的宽度和高度# text 输入文字字符串; fontFace 要使用的字体;# fontScale 字体比例因子,用来被特定字体的基本大小相乘;# thickness 用于渲染文本的线的粗细;labelSize, baseLine = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)top = max(top, labelSize[1])# cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)# 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细cv2.putText(img, label, (int(left-10), int(top-10)), cv2.FONT_HERSHEY_SIMPLEX, 0.7, colors[int(class_index)], thickness=2)cv2.imwrite("./test/0322/1.jpg", img)def plot_results2(image_path, bboxes_list, class_names_list):img = cv2.imread(image_path)for i in range(len(bboxes_list)):bbox = bboxes_list[i]left, top, right, bottom = bbox[0], bbox[1], bbox[2], bbox[3]class_name = class_names_list[i]class_index = class_names_list.index(class_name)# cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )# 参数表示依次为:(图片,长方形框左上角坐标, 长方形框右下角坐标,字体颜色,字体粗细)cv2.rectangle(img, (int(left),int(top)), (int(right),int(bottom)),  colors[int(class_index)], thickness=2)      label = class_name# cv2.getTextSize() 计算文本字符串的宽度和高度# text 输入文字字符串; fontFace 要使用的字体;# fontScale 字体比例因子,用来被特定字体的基本大小相乘;# thickness 用于渲染文本的线的粗细;labelSize_w, labelSize_h = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.75, 1)[0]cv2.rectangle(img, (int(left), int(top-labelSize_h)), (int(left+labelSize_w), int(top)), colors[int(class_index)], -1, cv2.LINE_AA)top = max(top, labelSize_h)# cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)# 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细cv2.putText(img, label, (int(left), int(top)), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255, 255, 255), thickness=1, lineType=cv2.LINE_AA)cv2.imwrite("./test/0322/2.jpg", img)def plot_results3(image_path, bboxes_list, class_names_list):img = cv2.imread(image_path)for i in range(len(bboxes_list)):bbox = bboxes_list[i]left, top, right, bottom = bbox[0], bbox[1], bbox[2], bbox[3]class_name = class_names_list[i]class_index = class_names_list.index(class_name)# cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )# 参数表示依次为:(图片,长方形框左上角坐标, 长方形框右下角坐标,字体颜色,字体粗细)cv2.rectangle(img, (int(left),int(top)), (int(right),int(bottom)),  colors[int(class_index)], thickness=2)      label = class_name# cv2.getTextSize() 计算文本字符串的宽度和高度# text 输入文字字符串; fontFace 要使用的字体;# fontScale 字体比例因子,用来被特定字体的基本大小相乘;# thickness 用于渲染文本的线的粗细;labelSize_w, labelSize_h = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0]cv2.rectangle(img, (int(left), int(top-labelSize_h-5)), (int(left+labelSize_w), int(top-5)), (55,55,55), -1, cv2.LINE_AA)top = max(top, labelSize_h)# cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)# 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细cv2.putText(img, label, (int(left), int(top-5)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (102,255,255), thickness=1, lineType=cv2.LINE_AA)cv2.imwrite("./test/0322/3.jpg", img)def plot_results4(image_path, bboxes_list, class_names_list):img = cv2.imread(image_path)for i in range(len(bboxes_list)):bbox = bboxes_list[i]left, top, right, bottom = bbox[0], bbox[1], bbox[2], bbox[3]class_name = class_names_list[i]class_index = class_names_list.index(class_name)# cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift )# 参数表示依次为:(图片,长方形框左上角坐标, 长方形框右下角坐标,字体颜色,字体粗细)cv2.rectangle(img, (int(left),int(top)), (int(right),int(bottom)),  colors[int(class_index)], thickness=2)      label = class_name# cv2.getTextSize() 计算文本字符串的宽度和高度# text 输入文字字符串; fontFace 要使用的字体;# fontScale 字体比例因子,用来被特定字体的基本大小相乘;# thickness 用于渲染文本的线的粗细;labelSize_w, labelSize_h = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0]cv2.rectangle(img, (int(left), int(top-labelSize_h-5)), (int(left+labelSize_w*0.5), int(top-2)), (55,55,55), -1, cv2.LINE_AA)top = max(top, labelSize_h)# cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)# 各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细#cv2.putText(img, label, (int(left), int(top-5)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (102,255,255), thickness=1, lineType=cv2.LINE_AA)print(label, (int(left), int(top)))img = puttext_cn(img, label, (int(left), int(top-15)), (255,255,102), size=12)cv2.imwrite("./test/0322/4.jpg", img)if __name__ == "__main__":image_path = "./test/0322/032201.jpg"bboxes_list = [[707,538,803,667], [321,519,413,536], [689,483,717,520]]class_names_list = ['cement_crack_p', 'cement_spall_kok', 'cement_crack_p']# class_names_list = ['水泥-横向裂缝', '水泥-边角剥落', '水泥-纵向裂缝']# 获得hsv格式的不同色度hsv_tuples = [(x/len(class_names_list), 0.5, 1.) for x in range(len(class_names_list))]  # 获得RGB格式的不同颜色colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))  # 通过hsv格式来调整不同类别对应边框的色度colors = list(map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)), colors)) plot_results3(image_path, bboxes_list, class_names_list)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

linux centos 安装jenkins,并构建spring boot项目

首先安装jenkins,使用war包安装,比较简单,注意看下载的版本需要的JDK版本,官网下载https://www.jenkins.io/download/ 把下载好的war包放到服务器上,然后运行,注意8080端口的放行 # 前台运行并指定端口 ja…

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

ALPHA开发板中CAN硬件图

一. 简介 前面文章学习了 IMX6ULL芯片的 CAN总线协议,CAN传输速率。 本文来搜索 ALPHA开发板中CAN硬件原理图,以及CAN设备节点信息。这里主要是CAN控制器的驱动,属于IMX6ULL芯片内部的驱动,NXP官方已经写好。 CAN控制器的驱动…

InstructGPT的流程介绍

1. Step1:SFT,Supervised Fine-Tuning,有监督微调。顾名思义,它是在有监督(有标注)数据上微调训练得到的。这里的监督数据其实就是输入Prompt,输出相应的回复,只不过这里的回复是人工…

springboot项目学习-瑞吉外卖(2)

今天主要完善以下功能: 拦截页面(页面拦截功能,在这里用的是过滤器实现的)添加员工功能 项目结构 1.页面拦截功能 filter——LoginCheckFilter类 Slf4j WebFilter(filterName "LoginCheckFilter",urlPatterns "/*") public clas…

Qt打开已有工程方法

在Qt中,对于一个已有工程如何进行打开? 1、首先打开Qt Creator 2、点击文件->打开文件或项目,找到对应文件夹下的.pro文件并打开 3、点击配置工程 这样就打开对应的Qt项目了,点击运行即可看到对应的效果 Qt开发涉及界面修饰…

01-DBA自学课-安装部署MySQL

一、安装包下载 1,登录官网 MySQL :: MySQL Downloads 2,点击社区版下载 3,找到社区服务版 4,点击“档案”Archives 就是找到历史版本; 5,选择版本进行下载 本次学习,我们使用MySQL-8.0.26版本…

IAB欧洲发布首张泛欧洲数字零售媒体能力矩阵图

2024年1月18日,互动广告署-欧洲办事处(IAB Europe)发布了首张泛欧洲数字零售媒体能力矩阵图。为媒体买家提供的新资源概述了在欧洲运营的零售商提供的现场、场外和数字店内零售媒体广告机会。 2024年1月18日,比利时布鲁塞尔,欧洲领…

实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库

随着互联网的迅猛发展,网络爬虫在信息收集、数据分析等领域扮演着重要角色。而在当前的技术环境下,使用TypeScript编写网络爬虫程序成为越来越流行的选择。TypeScript作为JavaScript的超集,通过类型检查和面向对象的特性,提高了代…

NFT交易市场-后端开发

首先我们需要配置好我们的ipfs,参考官方文档 1.https://docs.ipfs.tech/install/command-line/#system-requirementshttps://docs.ipfs.tech/how-to/command-line-quick-start/#initialize-the-repository 首先新建一个文件夹 然后在终端输入npm init -y命令进行初…

【AI】发现一款运行成本较低的SelfHosting语言模型

【背景】 作为一个想构建局域网AI服务的屌丝,一直苦恼的自然是有限的资源下有没有对Spec要求低一点的SelfHosting的AI服务框架了。今天给大家介绍这款听起来有点希望,但是我也还没试验过,感兴趣的可以去尝试看看。 【介绍】 大模型生成式AI与别的技术不同,由于资源要求高…

分布式之网关介绍

一、网关简介 1、网关背景 由于微服务“各自为政的特性”使微服务的使用非常麻烦。通常公司会有一个“前台小姐姐”作为统一入口,这就是网关 2、网关作用 统一入口:为服务提供一个唯一的入口,网关起到外部和内部隔离的作用, 保…

演讲嘉宾公布 | 智能家居与会议系统专题论坛将于3月28日举办

一、智能家居与会议系统专题论坛 智能家居通过集成先进的技术和设备,为人们提供了更安全、舒适、高效、便捷且多彩的生活体验。智能会议系统它通过先进的技术手段,提高了会议效率,降低了沟通成本,提升了参会者的会议体验。对于现代…

iOS模拟器 Unable to boot the Simulator —— Ficow笔记

本文首发于 Ficow Shen’s Blog,原文地址: iOS模拟器 Unable to boot the Simulator —— Ficow笔记。 内容概览 前言终结模拟器进程命令行改权限清除模拟器缓存总结 前言 iOS模拟器和Xcode一样不靠谱,问题也不少。😂 那就有病治…

设计数据库之外部模式:数据库的应用

Chapter5:设计数据库之外部模式:数据库的应用 笔记来源:《漫画数据库》—科学出版社 设计数据库的步骤: 概念模式 概念模式(conceptual schema)是指将现实世界模型化的阶段进而,是确定数据库理论结构的阶段。 概念模…

分布式搜索引擎-DSL查询文档

分布式搜索引擎-DSL查询文档 文章目录 分布式搜索引擎-DSL查询文档1、DSL Query的分类1.1、全文检索查询1.2、精确查询1.3、地理查询1.4、复合查询1.5、Function Score Query1.6、复合查询Boolean Query 2、搜索结果处理2.1、排序2.2、分页2.3、深度分页2.4、高亮 1、DSL Query…

优化选址问题 | 基于鹈鹕算法求解基站选址问题含Matlab源码

目录 问题代码问题 鹈鹕算法(Pelican Optimization Algorithm, POA)是一种相对较新的启发式优化算法,模拟了鹈鹕鸟觅食的行为。这种算法通常用于解决复杂的优化问题,如函数优化、路径规划、调度问题等。基站选址问题通常是一个复杂的优化问题,需要考虑覆盖范围、干扰、成…

java设计模式(2)---六大原则

设计模式之六大原则 这篇博客非常有意义,希望自己能够理解的基础上,在实际开发中融入这些思想,运用里面的精髓。 先列出六大原则:单一职责原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特原则、开闭原则。 一、单一职…

STM32 使用gcc编译介绍

文章目录 前言1. keil5下的默认编译工具链用的是哪个2. Arm编译工具链和GCC编译工具链有什么区别吗?3. Gcc交叉编译工具链的命名规范4. 怎么下载gcc-arm编译工具链参考资料 前言 我们在STM32上进行开发时,一般都是基于Keil5进行编译下载,Kei…

docker 数据卷 (二)

1,为什么使用数据卷 卷是在一个或多个容器内被选定的目录,为docker提供持久化数据或共享数据,是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效,当提交或创建镜像时,卷不被包括在镜像中。 总结为两…