Image,cv2读取图片的numpy数组的转换和尺寸resize变化

本文详细介绍了图片尺寸修改的方法,包括使用`torchvision.transforms.Resize`、`PIL.Image.resize`和`cv2.resize`的参数顺序及效果。同时,讨论了图片从`PIL`到`numpy`再到`torch.Tensor`的转换过程中尺寸和形状的变化,并展示了`Image.size`与`numpy.array().shape`的不同。最后,通过代码示例对比了不同方法修改图片尺寸的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几种图片尺寸修改和参数总结

(from torchvision import transforms as T

显示尺寸格式的不同

  • Image类型和T进行resize的图片的size属性显示参数顺序是W、H
  • cv2的显示shape的显示参数顺序是H、W、C
  • T.ToTensor()(img),将图片转换为tensor类型,显示是size()方法,例如,
import numpy as np
from PIL import Image
from torchvision import transforms as T
# import matplotlib.image as Img

img = Image.open('4.jpg')
img_tran = T.Resize((512,256))(img)
print(img_tran.size)   #(256, 512)
print(np.array(img_tran).shape)  # (512, 256, 3)
img_to = T.ToTensor()(img_tran)
img_to_array = np.array(img_to)
print(img_to.size()) #torch.Size([3, 512, 256])
print(img_to_array.shape) # (3, 512, 256)
  • 可以看出size()方法显示的是将通道放在第一位了。

修改图片尺寸的函数参数顺序

-T.Resize((H,W))(img)

  • img.resize((W,H))、cv2.resize(img_read,(W,H))

在这里插入图片描述

Image图片数据和numpy数据的相互转换

Image图片转换为numpy数据

np.array(img)

from PIL import Image
import numpy as np
img = Image.open('4.jpg')
img_array = np.array(img)

numpy数据转换为Image图片

Image.fromarray(img_arr.astype(‘uint8’))
Image.fromarray(np.uint8(img))

from PIL import Image
import numpy as np
img = Image.open('4.jpg')
img_array = np.array(img)
img_image = Image.fromarray(img_arr.astype('uint8'))

Image尺寸显示和numpy的shape显示问题

Image.size属性显示的是**宽、高**
img_array.shape属性,显示的是**高、宽、通道**

from PIL import Image
from torchvision import transforms as T
import numpy as np
img = Image.open('4.jpg')
img_array = np.array(img)
print(img.size)   # (720, 1160)
print(img_arr.shape)  # (1160, 720, 3)

plt.figure()

plt.subplot(1,3,1)
plt.imshow(img)

plt.subplot(1,3,2)
plt.imshow(img_array)
plt.show()

在这里插入图片描述

img.resize(w, h),T.Resize((h,w))(img),cv2.resize(img,(w,h))

功能:将读取后的图片尺寸的宽和高修改

import cv2
from PIL import Image
from torchvision import transforms as T

img = Image.open('4.jpg')
img_resize = img.resize((512,256))
img_tran = T.Resize((512,256))(img)
img_array = np.array(img)

img_read = cv2.imread('4.jpg')
img_cv2 = cv2.resize(img_read,(512,256))

print(img_resize.size)  #(512, 256)
print(img_array.shape)  #(1160, 720, 3)
print(img_tran.size)  # (256, 512)
print(img_cv2.shape)  # (256, 512, 3)

plt.figure()

plt.subplot(1,3,1)
plt.title('img_resize')
plt.imshow(img_resize)

plt.subplot(1,3,2)
plt.title('img_tran')
plt.imshow(img_tran)

plt.subplot(1,3,3)
plt.title('img_cv2')
plt.imshow(img_cv2)

plt.show()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值