• 【pytorch】关于OpenCV和PIL.Image读取图片的区别


    数据使用方角度

    首先从pytorch出发,torchvision.transforms()要求传入的图像是PIL.Image格式(通道要求是RGB格式的),另外模型处理输入要转换为[1,channel,H,W];

    所以最终导入torchvision.transforms()的图像格式需要转成PIL.Image,且需要在转换后增加batch维度([channel,H,W]变成[1,channel,H,W])

    
    	test_transform=torchvision.transforms.Compose([
    		...
    	    transforms.ToTensor(),
    	    ...
    	])
    	
    	input_img=test_transform(img_pil).unsqueeze(0)
    	pred_logits=model(input_img)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    OpenCV和PIL.Image区别

    1. PIL.Image

    a. 读取图片

    
    	from PIL import Image
    	img_pil = Image.open(path)
    	
    
    • 1
    • 2
    • 3
    • 4

    img_pil为PIL.JpegImagePlugin.JpegImageFile对象,图像形状(维度)是[W,H],通道是RGB
    注意:使用numpy库读取格式为(width, height)的pillow的图片后,
    数据的格式自动转为(height, width, channels)

    b.PIL转OpenCV

    
    	import cv2
    	from PIL import Image
    	import numpy
     
    	image = Image.open("plane.jpg")
    	image.show()
    	img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
    	cv2.imshow("OpenCV",img)
    	cv2.waitKey()
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    c.保存图像

    注意:当往图片添加中文时,需要使用PIL

    
    	from PIL import ImageFont, ImageDraw
    	
    	# 导入中文字体,指定字号
    	font = ImageFont.truetype('SimHei.ttf', 32)
    	draw = ImageDraw.Draw(img_pil)
    	text=“我爱学python”
    	draw.text((50, 100 + 50 ), text, font=font, fill=(255, 0, 0, 1))
    	# 保存图片
    	img_pil.save('output/img_pred.jpg')
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2. OpenCV

    a. 读取图片

    
    	import cv2
    	img_cv2 = cv2.imread(path)
    	
    
    • 1
    • 2
    • 3
    • 4

    img_cv2为numpy.ndarray格式,是uint8类型,0-255范围,图像形状(维度)是[H,W,C],通道是BGR

    b.OpenCV转PIL

    
    	import cv2
    	from PIL import Image
    	import numpy
    	 
    	img = cv2.imread("plane.jpg")
    	cv2.imshow("OpenCV",img)
    	image =Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
    	image.show()
    	cv2.waitKey()
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    c.保存图像

    cv2可以保存英文。

    
    	import cv2
    	
    	# 用 opencv 载入原图
    	img_bgr = cv2.imread(img_path)
    	text=“我爱学python”
    	img_bgr = cv2.putText(img_bgr, text, (25, 50 + 40 ), cv2.FONT_HERSHEY_SIMPLEX, 1.25, (0, 0, 255), 3)
    	# 保存图像
    	cv2.imwrite('output/img_pred.jpg', img_bgr)
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    【每日一题】补档 ARC134D - Concatenate Subsequences | 思维 | 简单
    .NET 零开销抽象指南
    day4 学习python爬虫——接口与常见反爬
    【C#语音文字互转】.NET的TTS文本转语音合成
    Netty10-WebSocket长连接开发
    软考高级架构师下篇-17安全架构设计理论与实践
    Jenkins Jenkinsfile管理 Pipeline script from SCM
    实战Node.js原理对于阻塞和EventEmitter及其继承的运用心得
    打开记事本
    JQuery
  • 原文地址:https://blog.csdn.net/cxh21627/article/details/126255953