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


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

    (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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 可以看出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)
    
    • 1
    • 2
    • 3
    • 4

    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'))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

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

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

    import cv2
    import matplotlib.image as Img
    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    基于Django图书管理系统设计与实践
    【爬虫】力扣每日一题每天自动邮件提醒!!!
    基于FPGA的fir滤波器设计verilog实现
    基于Android和SSH的旅游自助系统APP设计
    2022上海省赛(A,E,G,H,M,N)
    多云容器集群服务的设计与实现
    java运算操作符示例大全
    【Elixr】 introduce
    变分自编码器 (Variational Autoencoders, VAEs)
    git 使用之撤销暂存区提交
  • 原文地址:https://blog.csdn.net/weixin_43794311/article/details/125438169