目标检测预测框可视化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…

脉冲变压器电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,铁心结构3.2,铁心材料3.3,绕组4,工艺流程4.1,准备铁芯4.2,绕制线圈4.3,安装线圈4.4,固定线圈4.5,绝缘处理4.6,高压脉冲引出

rtt的IO设备框架面向对象学习-oopc实现特点

网上oopc实现方式都能搜得到,如oopc参考文章,rtt的oopc也是基本一样。大家好像都有个共识了: (1)定义类都用struct——这一过程就是抽象封装的过程,把属性和方法封装到struct里面,方法用函数指针变量表示&a…

前端向后端传入json 后台怎么接收(params呢)

目录 一、使用POJO若前端传递过来的数据刚好和我们的bean实体对象属性一致,则可以使用对象的形式接收。后端实体类 二、使用Map接收后台Controller 三、使用RequestParams 1,params传参 2.地址拼接传参 当前端传来json数据时,后端有多种…

dji esdk开发(2)订阅实时视频流

文章目录 1、主要接口介绍1.1、订阅码流服务状态1.2、初始化、开始、和结束订阅码流1.2.1、订阅码流初始化1.2.2、开始码流传输1.2.3、停止码流传输1.3、设置负载相机码流源2、测试2.1、获取RGB图像2.1.1、解码部分2.1.2、完整测试代码如下2.2、目标检测并显示2.2.1、解码部分2…

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

文章目录 前言一、前序二、中序三、后序 前言 本文实现二叉树的前中后的非递归遍历,使用栈来模拟递归。 文字有点简略,需要看图和代码理解 树节点: 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 无法消除…

快速入门Kotlin①基本语法

前言 23年底读了一遍“Kotlin官方文档”,官方文档大而全,阅读下来,大有裨益。 此系列文章的目的是记录学习进程,同时,若能让读者迅速掌握重点内容并快速上手,那就再好不过了。 函数 带有两个 Int 参数、…

JDBC复习

JDBC 1.注册驱动 // new的这个driver具体选择: // 驱动版本8以上的,选择mysql.cj.jdbc.Driver // 以下得,选择mysql.jdbc.Driver DriverManager.registerDriver(new Driver())// 一般使用反射,来注册驱动,也便于直接…

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…

Android studio 简单入门程序

1. 创建一个新的 Android Studio 项目。 2. 在activity_main.xml布局文件中添加一个 TextView 控件&#xff0c;用于显示文本。 3. 在对应的 Activity 类&#xff08;例如 MainActivity.java&#xff09;中&#xff0c;获取 TextView 控件并设置文本内容。 以下是示例代码&…

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

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

Python爬虫之urllib库

1、urllib库的介绍 可以实现HTTP请求&#xff0c;我们要做的就是指定请求的URL、请求头、请求体等信息 urllib库包含如下四个模块 request&#xff1a;基本的HTTP请求模块&#xff0c;可以模拟请求的发送。error&#xff1a;异常处理模块。parse&#xff1a;工具模块&#x…