pychon/PIL/opencv/json学习过程中遇到的问题

1. 使用PIL.Image读取图片

注意:pytorch中对图像预处理是transforms的输入必须是PIL格式的文件,使用cv2读取的图片就按照第二条的代码处理(3通道合并、归一化处理)

from PIL import Image
img = Image.open("test1.jpg")读取图像
img.show()展示图片
print(img.size)查看图像是255*255大小的数据,每个像素点是0-1的值。而cv2读出每个像素点为0-255.

如果进行FasterRCNN推理:

	net=torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)transform = transforms.Compose([transforms.Resize(256),transforms.CenterCrop(224),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])img = Image.open("test1.jpg")img_t = transform(img)#裁剪及转换为张量batch_t = torch.unsqueeze(img_t,0)net.eval()out2=net(batch_t)

2.使用opencv读取图片

src_img=cv2.imread("test1.jpg")#读取图片
cv2.imshow("result",src_img)#显示图片
print(src_img.shape)#可查看大小为(255,255,3)此时cv2读取的图像格式为BGR,且每个像素点的值为0-255,需要使用	cv2.cvtColor(img,cv2.COLOR_BGR2RGB)转换为RGB格式
import cv2
import torch 
import torchvision
import numpy as np
from PIL import Image
import PIL
from matplotlib import pyplot as plt
from torchvision import transformsnet=torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
net.eval()
src_img=cv2.imread("test1.jpg")
img = cv2.cvtColor(src_img,cv2.COLOR_BGR2RGB)
img_tensor = torch.from_numpy(img/255.).permute(2,0,1).float()
input=[]
input.append(img_tensor)
out2=net(input)
boxes=out2[0]['boxes']
labels=out2[0]['labels']
scores=out2[0]['scores']
boxes=boxes.detach().numpy()
boxes=np.array(boxes,np.uint8)
for idx in range(boxes.shape[0]):if scores[idx] >= 0.95:x1,y1,x2,y2=boxes[idx][0],boxes[idx][1],boxes[idx][2],boxes[idx][3]cv2.rectangle(src_img,(x1,y1),(x2,y2),(0,255,0),thickness=2)cv2.imshow("result",src_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3.PIL和cv2图片相互转换:

img_pil=Image.fromarray(cv2.cvtColor(img_cv,cv2.COLOR_BGR2RGB))
img_cv=cv2.cvtColor(np.asarray(img_pil),cv2.COLOR_RGB2BGR)

Image读取的图片使用cv2显示:

img = Image.open("test1.jpg")
print(img.size)#(255,255)
cv2img=np.array(img.convert('RGB'))#转换为RGB格式
print(cv2img.shape)#(255,255,3)
cv2img=cv2.cvtColor(cv2img, cv2.COLOR_RGB2BGR)#cv2需要BGR格式图片
cv2.imshow("result",cv2img)#可正常展示

4.使用json保存读取文件,coco数据集为91类别,voc为21个类别

从txt文件加载字符串保存为json格式:
在这里插入图片描述
coco_classes.json:
在这里插入图片描述
代码:

import json
coco_class_path="./coco_classes.txt"#txt文件每行为一个数据如: 1 person前面为字典关键字key,person为字典value
jsondata={}#json文件是字典结构,用于存放数据
with open(coco_class_path,'r') as coco:for line in coco.readlines():#遍历txt文件每行字符串line=line.strip().split()#strip()去除两边控空字符,split()以空格分割字符串if len(line)>2:print(line[0],line[1],line[2])jsondata[line[0]] = line[1]+' '+line[2]#有些value为两个单词else:jsondata[line[0]] = line[1]with open('coco_classes.json','w') as coco:#写入json文件json.dump(jsondata,coco)with open('coco_classes.json','r') as coco:#从json文件读出readjson=json.load(coco)print(readjson)

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

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

相关文章

tensorboard报错解决:No dashboards are active for the current data set

版本:tensorboard 2.10.0 问题:文件夹下明明有events文件,但用tensorboard命令却无法显示。 例如: 原因:有可能是文件路径太长了,导致系统无法读取文件。在win系统中规定,目录的绝对路径不得超…

vue,react虚拟dom

Virtual DOM 前言 在传统的Web开发中,直接操作真实的DOM通常是一个昂贵且低效的操作。为了解决这个问题,Virtual DOM(虚拟DOM)被引入为一个中间层,允许开发者在内存中进行操作,从而避免频繁且不必要的真实D…

Docker Desktop 和 WSL2 位置迁移

迁移 WSL2 安装位置 WSL2 默认安装在 C 盘,我们可以通过以下步骤迁移安装位置 通过以下命令列出已安装的 Linux 发行版: wsl -l -v可以看到已安装了 Ubuntu-22.04,其运行状态为:Stopped 如果运行状态为 Running,需…

HRNet关键点检测

HRNet是一种用于关键点检测的网络架构,它具有一些优点和缺点。 优点: 可以保持高分辨率:HRNet将高分辨率到低分辨率的子网并联连接,而不是像大多数现有解决方案那样串联连接。因此,HRNet能够保持高分辨率&#xff0c…

怎么设置代理IP进行网络爬取呢?代理访问网络如何设置?

在如今网络爬虫广泛应用的年代,很多时候我们都会遇到需要使用代理IP进行网络爬取的情况。代理IP可以帮助我们隐藏真实的IP地址,从而保护我们的隐私和安全。那么,怎么设置代理IP进行网络爬取呢?代理访问网络如何设置?下…

【C++入门篇】保姆级教程篇【下】

目录 一、运算符重载 1)比较、赋值运算符重载 2) 流插入留提取运算符重载 二、剩下的默认成员函数 1)赋值运算符重载 2)const成员函数 3)取地址及const取地址操作符重载 三、再谈构造函数 1)初始化列表 …

某城高速综合管控大数据大屏可视化【可视化项目案例-04】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

Linux网络——自定义协议

目录 一.什么是协议 二.协议与报文 三.自定义协议 1.封装套接字 2.构建请求与响应 3.序列化和反序列化 4.报头添加和去除 5.报文读取 四.服务器端程序 五.客户端程序 一.什么是协议 协议在生活中泛指:双方或多方为了完成某项任务或达成某种目的而制定的共…

使用Inis搭配内网穿透实现Ubuntu上快速搭建博客网站远程访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总…

Python 使用tkinter复刻Windows记事本UI和菜单功能(二)

上一篇:Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器(一)-CSDN博客 下一篇:敬请耐心等待,如发现BUG以及建议,请在评论区发表,谢谢! 相对上一篇文章,本篇文…

PCL安装与使用

1 apt安装 ubuntu20.04及以上版本下可以直接通过apt方式安装pcl编译好的二进制文件,二进制安装的版本为1.10。 sudo apt update sudo apt install libpcl-dev 2 源码安装 在pcl的github上下载对应的版本进行安装: https://github.com/PointCloudLibrary/pcl/rel…

扫码连接WiFi微信小程序项目(带源码下载)

微信小程序扫码连wifi(共享wifi)(WiFi地推项目),2023年非常火爆全网的项目 下载: 项目源码 效果图如下 一 扫码连接WiFi如何收益 用户扫码连接WiFi时会有4-15秒的广告弹框,有效时间看完后微信会发送给项目负责人0.5-1元的广告费 (如给1元) 项目负责人(团长)(收益2…