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 transforms

net=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格式:
pychon/PIL/opencv/json学习过程中遇到的问题_第1张图片
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)

你可能感兴趣的:(opencv,学习,人工智能)