目标检测预测框可视化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.mzph.cn/news/766609.shtml

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

相关文章

注册中心的基础知识

什么是注册中心 当服务启动时,将服务信息服务名称/IP/端口写入注册中心.注册中心接收服务端信息时保存服务信息,并且维护服务列表数据当服务消费者启动时会通过IP:端口(注册中心)远程链接注册中心. 获取服务列表信息.缓存到本地 当消费者调用服务时,查找缓存到本地的服务列表…

XSS一-WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

演示案例: XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM #XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续),存储(…

LinuxYUMVimg++/gccgdbGit使用

前言 大家好,我是jiantaoyab,前面的文章给大家介绍了Linux的基础命令和权限,学会了命令行的模式使用Linux,今后要开始在Linux上写代码了,在这篇文章将介绍YUM、vim、gdb、git等常用的工具。 先来看看Linux如何安装软…

怎么拆解台式电脑风扇CPU风扇的拆卸步骤-怎么挑

今天我就跟大家分享一下如何选购电脑风扇的知识。 我也会解释一下机箱散热风扇一般用多少转。 如果它恰好解决了您现在面临的问题,请不要忘记关注本站并立即开始! 文章目录列表:大家一般机箱散热风扇都用多少转? 机箱散热风扇选择…

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

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

数据结构 - 二叉树非递归遍历

文章目录 前言一、前序二、中序三、后序 前言 本文实现二叉树的前中后的非递归遍历,使用栈来模拟递归。 文字有点简略,需要看图和代码理解 树节点: typedef char DATA; //树节点 typedef struct Node {DATA data; //数据struct Node* left…

嵌入式仿真平台

嵌入式仿真实验教学平台 (puliedu.com) 这个平台可以写代码,元件拖一下就行,但是就是用的是标准库,自己一般写的hal库程序用不了,但是新手用还是可以的

I2C系列(三):软件模拟I2C读写24C04

一.目标 PC 端的串口调试软件通过 RS-485 与单片机通信,控制单片机利用软件模拟 I2C 总线对 EEPROM(24C04) 进行任意读写。 二.RS-485简述 在工业控制领域,传输距离越长,要求抗干扰能力也越强。由于 RS-232 无法消除…

CSS3 中的盒模型:标准与IE盒模型的差异

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2、Jenkins持续集成-gitlab安装和源码上传

文章目录 1、Gitlab代码托管服务器安装2、源代码上传托管 环境&资源准备 统一采用VMware中安装CentOS7,安装教程,统一设置静态IP资源包都存在于我的资源里面 资源版本&位置 名称机器IP软件代码托管服务器192.168.2.100Gitlab-12.4.2持续集成服…

Polar 2024春季个人挑战赛 Jay17 WP

Polar 2024春季个人挑战赛 Rank&#xff1a;7 【WEB】机器人 开题 起手敏感文件robots.txt 【WEB】PHP反序列化初试 最简单的php反序列化 POC&#xff1a; <?php class Easy{public $name;public function __wakeup(){echo $this->name;} } class Evil{public $evi…

手机实时监控电脑屏幕(手机可以看到电脑在干什么吗)

已经2024年了&#xff0c;假如你还在问我&#xff0c;手机可以看到电脑在干什么吗&#xff0c;有没有手机实时监控电脑屏幕的系统。 那么证明&#xff0c;你可能已经out 了。 现代科技告诉发展的态势下&#xff0c;这种技术已经很成熟了。 域智盾软件就可以实现这种效果↓我们…

Chapter 2. A simple interconnection network

A Simple Interconnection Network 一个简单的互连网络 2.1 网络规范和约束2.2 拓扑2.3 路由2.4 流量控制2.5 路由器设计性能分析 A Simple Interconnection Network 一个简单的互连网络 我们将研究简单互连网络的架构和设计&#xff0c;以提供全局视图。我们将研究最简单的…

【数据结构初阶】之堆(C语言实现)

数据结构初阶之堆&#xff08;C语言实现&#xff09; &#x1f30f; 堆的概念&#x1f30f; 堆的模拟实现&#x1f413; 堆的结构和方法接口&#x1f413; 堆的方法的模拟实现&#x1f64a; 堆的初始化&#x1f64a; 堆的构建&#x1f64a; 堆的插入&#x1f64a; 向上调整&…

【SysBench】OLTP 基准测试示例

前言 本文采用 MySQL 沙盒实例作为测试目标&#xff0c;使用 sysbench-1.20 对其做 OLTP 基准测试。 有关 MySQL 沙盒的更多信息&#xff0c;请参阅 玩转 MySQL Shell 沙盒实例&#xff0c;【MySQL Shell】6.8 AdminAPI MySQL 沙盒 。 1、部署一个 MySQL 沙盒实例 使用 mysq…

指尖论文怎么用 #经验分享#学习方法

指尖论文是一款优秀的论文写作、查重降重工具&#xff0c;被广泛认可为高效、可靠、方便的辅助工具。那么&#xff0c;如何正确地使用指尖论文呢&#xff1f; 首先&#xff0c;用户需要注册一个指尖论文的账号&#xff0c;并登录到平台上。注册过程非常简单&#xff0c;只需要输…

瑞芯微RK3576|触觉智能:开启科技新篇章

更多产品详情可关注深圳触觉智能官网&#xff01; “瑞芯微&#xff0c;创新不止步&#xff01;”——全新芯片RK3576即将震撼登场。指引科技风潮&#xff0c;创造未来无限可能&#xff01;这款芯片在瑞芯微不断创新和突破的道路上&#xff0c;不仅是对过往成就的完美延续&…

V R元宇宙平台的未来方向|V R主题馆加 盟|游戏体验馆

未来&#xff0c;VR元宇宙平台可能会呈现出以下发展趋势和可能性&#xff1a; 全面融合现实与虚拟世界&#xff1a; VR元宇宙平台将更加无缝地融合现实世界和虚拟世界&#xff0c;用户可以在虚拟环境中进行各种活动&#xff0c;与现实世界进行互动&#xff0c;并且体验到更加逼…

FileZilla 链接服务器提示 20 秒连接超时

FileZilla 有个默认设置是如果 20 秒没有数据的话会自动中断链接。 Command: Pass: **************** Error: Connection timed out after 20 seconds of inactivity Error: Could not connect to server修改配置 这个配置是可以修改的&#xff0c;修改的步骤为&#xff1a; …

数据可视化-ECharts Html项目实战(5)

在之前的文章中&#xff0c;我们学习了如何设置滚动图例&#xff0c;工具箱设置和插入图片。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢 数据可视化-ECharts…