目标检测预测框可视化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.hqwc.cn/news/562844.html

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

相关文章

(附源码)基于Spring Boot和Vue的智能订餐与外卖系统设计与实现

1. 引言 这部分通常包含了研究背景、研究意义、国内外研究现状、本文研究内容以及论文结构安排。 研究背景:介绍当前外卖市场的快速发展,以及智能订餐系统对改善人们生活的影响。研究意义:强调这类系统在现代生活中的作用和开发的创新点。国…

极简自建web视频会议,私有云,rtmp/rtsp/webrtc一键参会直播会议互动方案

随着视频互动深入工作日常,很多客户需要自建一个会议,监控的交互平台,目前外面不管是开源还是非开源的平台,都是极为复杂,一般linux安装库关联部署复杂,非技术人员根本没办法使用,不方便集成部署…

信号处理之快速傅里叶变换(FFT)

信号处理之快速傅里叶变换FFT 历史溯源欧拉公式傅里叶级数(FS)傅里叶变换(FT)离散傅里叶级数(DFS)离散时间傅里叶变换(DTFT)离散傅里叶变换(DFT)快速傅里叶变换(FFT)MATLAB中常用的FFT工具FFT中常见的问题 历史溯源 相信很多人知道傅里叶变换,但是很多人对傅里叶变…

ctfshow-web入门-反序列化

web254 先看题 <?php/* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-12-02 17:44:47 # Last Modified by: h1xa # Last Modified time: 2020-12-02 19:29:02 # email: h1xactfer.com # link: https://ctfer.com*/error_reporting(0); highlight_file(__FIL…

Oracle 使用OGG(Oracle GoldenGate) 实现19c PDB与MySQL5.7 数据同步

OGG 是一种基于日志的结构化数据复制软件&#xff0c;它通过解析源数据库在线日志或归档日志获得数据的增删改变化。 OracleMysqlIP address192.168.80.100192.168.80.16DB version19.2.05.7host nametempmysql OS version&#xff1a; CentOS 7.9 一&#xff0c;Oracle 服务…

Apache TinkerPop 与 Gremlin 快速介绍

TinkerPop &#xff0c;Gremlin TinkerPop 是一个 Apache 项目&#xff0c;它为图数据库提供了一个通用的图处理框架。Gremlin 是 TinkerPop 框架的一部分&#xff0c;它是一个图遍历语言&#xff0c;用于在图数据库中执行复杂的图遍历查询。 Apache TinkerPop Apache Tinker…

C#,图论与图算法,计算图(Graph)的岛(Island)数量的算法与源程序

1 孤岛数 给定一个布尔矩阵,求孤岛数。一组相连的1形成一个岛。例如,下面的矩阵包含5个岛: 在讨论问题之前,让我们先了解什么是连接组件。无向图的连通分量是一个子图,其中每两个顶点通过一条路径相互连接,并且不与子图外的其他顶点连接。 所有顶点相互连接的图只有一个…

实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)

1、先看一效果&#xff1a; 2、实现思路&#xff1a; 使用定时器setTimeout和闭包实现常规防抖功能&#xff1b;增加immediate字段控制第一次是否执行一次函数&#xff08;true or false&#xff09;&#xff1b;增加一个flag标识&#xff0c;在第一次执行时&#xff0c;将标…

分布式ID生成方案总结

分布式场景下&#xff0c;由于通常是分库分表&#xff0c;所以通常无法仅仅使用数据库的自增Id。需要使用其他方案生成唯一的id。目前业界主流的是基于雪花算法或者雪花算法的改进版本。 UUID 有什么特点&#xff1f; 足够的简单&#xff0c;java原生自带。本地生成具有唯一性…

Hive入门

什么是hive&#xff1f; - Hive是Facebook开发并贡献给Hadoop开源社区的。它是建立在 Hadoop体系架构上的一层 SQL抽象&#xff0c;使得数据相关人 员使用他们最为熟悉的SQL语言就可以进行海量数据的处理、 分析和统计工作 - Hive将数据存储于HDFS的数据文件映射为一张数据库…

神级工具之git (一): git 基操

一切都从&#xff1a;Git User Manual开始&#xff0c;或者中文版的Git中文手册 核心概念 工作区 工作区我们可见的&#xff0c;可以进行修改的目录树。我们可以在目录树中进行文件的查看&#xff0c;修改。通常我们会使用一个神级编辑器Vim。我给她取了个名字&#xff0c;就…

新手小白学剪辑视频的知识点,什么是视频分辨率和位深度?

新手小白需要了解的视频剪辑知识点&#xff0c;什么是视频分辨率尺寸(文件大小)和位深度&#xff1f; 分辨率尺寸/文件大小 常见的视频分辨率是高清和 4K。高清素材的屏幕像素&#xff08;宽度 x 高度&#xff09;测量值通常为 1920 x 1080&#xff0c;而 4K 素材是其四倍&am…