plt函数显示图片 在图片上画边界框 边界框坐标转换

一.读取图片并显示图片

%matplotlib inline
import torch
from d2l import torch as d2l
'''读取图片'''
image_path = '../data/images/cat_dog_new.jpg'
# 创建画板
figure = d2l.set_figsize()
image = d2l.plt.imread(image_path)
d2l.plt.imshow(image);

在这里插入图片描述

二.给出一个(x左上角,y左上角,x右下角,y右下角)类型的框,在图片上画出该框

'''边界框'''
box = (60,50,460,510)
def bbox_to_rect(bbox, color):# 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:# ((左上x,左上y),宽,高)return d2l.plt.Rectangle(xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],fill=False, edgecolor=color, linewidth=2)
# 返回一个画布,该画布上面有图画image
fig = d2l.plt.imshow(image)
# 在该画布上画一个矩形框
fig.axes.add_patch(bbox_to_rect(box,'red'));

在这里插入图片描述

三. 边界框坐标转换

3.1 左上角右下角格式的坐标 --> 边界框中心坐标,框的高和宽

原:(x1,y1,x2,y2)
w = x2-x1
h = y2-y1
中心坐标 = (x1+w/2,y1+h/2)

def box_corner_to_center(boxes):# 因为以后boxes可能不止一个,所以 boxes[:,0]取出所有行的第一列x1,y1,x2,y2 = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]w = x2-x1h = y2-y1x_center,y_center = x1 + w/2, y1 + h/2# axis=-1表示在最后一个维度上进行堆叠boxes = torch.stack((x_center,y_center,w,h),axis = -1)return boxes

创建两个左上角走下角格式的坐标boxes

dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]
boxes = torch.tensor((dog_bbox,cat_bbox))
print(boxes)
boxes.shape
tensor([[ 60.,  45., 378., 516.],[400., 112., 655., 493.]])torch.Size([2, 4])

运行结果

box_corner_to_center(boxes)
tensor([[219.0000, 280.5000, 471.0000, 318.0000],[527.5000, 302.5000, 381.0000, 255.0000]])
torch.Size([2, 4])

3.2 边界框中心坐标,框的高和宽 --> 左上角右下角格式的坐标

原:(x_center,y_center,w,h)
x1 = x_center - 0.5w
y1 = y_center - 0.5
h
x2 = x_center + 0.5w
y2 = y_center + 0.5
h

def box_center_to_corner(boxes):x_center,y_center,w,h = boxes[:,0],boxes[:,1],boxes[:,2],boxes[:,3]x1,y1= x_center-0.5*w , y_center-0.5*hx2,y2= x_center+0.5*w , y_center+0.5*hboxes = torch.stack((x1,y1,x2,y2),axis=-1)return boxes
boxes = box_center_to_corner(boxes)
print(boxes)
boxes.shape
tensor([[ 60.,  45., 378., 516.],[400., 112., 655., 493.]])torch.Size([2, 4])

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

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

相关文章

9.12|day 5|day 44 |完全背包| 518. 零钱兑换 II | 377. 组合总和 Ⅳ

● 完全背包 主要是看清01背包和完全背包的区别 //01背包 for(int i 0;i<weight.size();i){ for(int j bagWeight;j>weight[i];j--){dp[j] Math.max(dp[j],dp[j-weight[i]]value[i]); } } //完全背包 for(int i 0;i<weight.size();i){for(int j weight[i];j<…

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、框架知识分布二、Spring1. spring-单例bean① 问题引入② 单例bean是线程安全的吗③ 问题总结④ 实战面试 2. spring-AOP① 问题引入② AOP记录操作日志③ …

C++ - map 的 例题

前言 本博客在 一下文章关于 map 和 set 讲解之下&#xff0c;对 map 当中的 operator[] &#xff08;&#xff09;函数的功能运用&#xff0c;感受 map 功能强大。 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

【C++】常用算术生成算法

0.前言 1.accumulate #include <iostream> using namespace std;// 常用算术生成算法 #include<vector> #include<numeric> //accumulate 的调用头文件void test01() {vector<int>v;for (int i 0; i < 100; i){v.push_back(i);}int total accumu…

【zlm】 webrtc源码讲解

目录 前端WEB 服务器收到请求 服务端的处理 播放 拉流 参考文章 前端WEB 服务器收到请求 POST /index/api/webrtc?applive&streamtest&typeplay HTTP/1.1 HttpSession::onRecvHeaderHttpSession::Handle_Req_POSTHttpSession::Handle_Req_POSTif (totalConte…

Java反射机制简单入门

标题 反射能干嘛获取Class对象的三种方式下面开始重点&#xff0c;需要掌握获取类的构造器并进行操作获取成员变量获取成员方法 这块建议先听第一个视频入门&#xff0c;第二个视频深入了解 视频学习地址1 视频学习地址1 正射:知道某个类&#xff0c;类的地址&#xff0c;通过…

水一下文章

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

云服务器下如何部署Django项目详细操作步骤

前期本人完成了“编写你的第一个 Django 应用程序”&#xff0c;有了一个简单的项目代码&#xff0c;在本地window系统自测没问题了&#xff0c;接下来就想办法部署到服务器上&#xff0c;可以通过公网访问我们的Django项目。将开发机器上运行的开发版软件实际安装到服务器上进…

华三路由交换技术基础——计算机网络基础

计算机网络&#xff1a; 定义&#xff1a;一组具有自治权的计算机互联的集合 作用&#xff1a; 1.共享信息资源 2.分解式处理信息 4.负载均衡 5.综合信息服务 它是计算机技术与通信技术的两个领域的结合 一&#xff0c;计算机网络中的基本概念&#xff1a; 局域网&#xff…

springboot MongoDB 主从 多数据源

上一篇&#xff0c;我写了关于用一个map管理mongodb多个数据源&#xff08;每个数据源&#xff0c;只有单例&#xff09;的内容。 springboot mongodb 配置多数据源 临到部署到阿里云的测试环境&#xff0c;发现还需要考虑一下主从的问题&#xff0c;阿里云买的数据库&#x…

ChatGPT 和 Elasticsearch:APM 工具、性能和成本分析

作者&#xff1a;LUCA WINTERGERST 在本博客中&#xff0c;我们将测试一个使用 OpenAI 的 Python 应用程序并分析其性能以及运行该应用程序的成本。 使用从应用程序收集的数据&#xff0c;我们还将展示如何将 LLMs 成到你的应用程序中。 在之前的博客文章中&#xff0c;我们构建…