自己构建矩阵与图片对应关系,保存为图片并解析

import numpy as np
import scipy.misc
import scipy.io
from PIL import Image

# 92 18 57分别对应着三个通道上的
# 92 66 46 25 70 56 47 12 对应着一个通道的第一行,可以确定图片的width为8
# 92 45 65 233 42 59 对应着一个通道的第一列,可以确定图片的height为6
list_image = [
    [[[92, 18, 57],
      [66, 28, 38],
      [46, 29, 46],
      [25, 23, 90],
      [70, 13, 27],
      [56, 75, 20],
      [47, 21, 31],
      [12, 52, 98]],
    [[45, 18, 57],
     [66, 28, 38],
     [46, 29, 46],
     [25, 23, 90],
     [170, 13, 27],
     [56, 375, 20],
     [147, 21, 31],
     [12, 52, 98]],
    [[65, 18, 57],
     [66, 28, 211],
     [16, 29, 21],
     [25, 23, 90],
     [60, 13, 27],
     [56, 375, 20],
     [47, 201, 31],
     [45, 52, 98]],
    [[233, 34, 75],
     [15, 264, 52],
     [42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 264, 52]],
    [[42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 164, 52],
     [42, 62, 14],
     [31, 30, 54]],
    [[59, 20, 82],
     [61, 6, 22],
     [43, 12,90],
     [76,28,10],
     [87,21,199],
     [90,87,122],
     [98,124,211],
     [10,89,20]]
     ]
    ]

# 四维矩阵维度确定例子:
# 第一个维度中我们拆解最外面的中括号,其中包含一个元素,所以第一个维度长度为1
'''
    [[[92, 18, 57],
      [66, 28, 38],
      [46, 29, 46],
      [25, 23, 90],
      [70, 13, 27],
      [56, 75, 20],
      [47, 21, 31],
      [12, 52, 98]],
    [[45, 18, 57],
     [66, 28, 38],
     [46, 29, 46],
     [25, 23, 90],
     [170, 13, 27],
     [56, 375, 20],
     [147, 21, 31],
     [12, 52, 98]],
    [[65, 18, 57],
     [66, 28, 211],
     [16, 29, 21],
     [25, 23, 90],
     [60, 13, 27],
     [56, 375, 20],
     [47, 201, 31],
     [45, 52, 98]],
    [[233, 34, 75],
     [15, 264, 52],
     [42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 264, 52]],
    [[42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 164, 52],
     [42, 62, 14],
     [31, 30, 54]],
    [[59, 20, 82],
     [61, 6, 22],
     [43, 12,90],
     [76,28,10],
     [87,21,199],
     [90,87,122],
     [98,124,211],
     [10,89,20]],
     ]
'''
# 第二个维度拆解两个中括号,里面有5个逗号分隔,包含6个大的元素,所以维度是6
'''
    [[92, 18, 57],
      [66, 28, 38],
      [46, 29, 46],
      [25, 23, 90],
      [70, 13, 27],
      [56, 75, 20],
      [47, 21, 31],
      [12, 52, 98]],
    [[45, 18, 57],
     [66, 28, 38],
     [46, 29, 46],
     [25, 23, 90],
     [170, 13, 27],
     [56, 375, 20],
     [147, 21, 31],
     [12, 52, 98]],
    [[65, 18, 57],
     [66, 28, 211],
     [16, 29, 21],
     [25, 23, 90],
     [60, 13, 27],
     [56, 375, 20],
     [47, 201, 31],
     [45, 52, 98]],
    [[233, 34, 75],
     [15, 264, 52],
     [42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 264, 52]],
    [[42, 62, 14],
     [31, 39, 59],
     [59, 20, 82],
     [61, 66, 22],
     [100, 34, 37],
     [15, 164, 52],
     [42, 62, 14],
     [31, 30, 54]],
    [[59, 20, 82],
     [61, 6, 22],
     [43, 12,90],
     [76,28,10],
     [87,21,255],
     [90,87,122],
     [98,124,211],
     [10,89,20]]
'''
# 第三个维度拆解三个中括号,里面有7个逗号分隔,包含8个元素,所以第三个维度长度为8
'''
      [92, 18, 57],
      [66, 28, 38],
      [46, 29, 46],
      [25, 23, 90],
      [70, 13, 27],
      [56, 75, 20],
      [47, 21, 31],
      [12, 52, 98]
'''
# 第三个维度拆解四个中括号,其中有2个逗号,3个元素,所以第四个维度长度为3
'''
92, 18, 57
'''



array_y = np.array(list_image)
print(array_y.shape) # (1, 6, 8, 3)  在这样的矩阵里面1表示一张图片,6代表行 8代表列 3表示通道数
# 在tensorflow中,我们通常使用的图片维度应该是(?,height,width,channels)
# 将第一个维度缩减,变成(6, 8, 3)
array_image = np.squeeze(array_y,axis=0)
# 获取第一个通道
a = array_image[:,:,0]


### 2  使用自建矩阵实验,使用scipy模块
# scipy.misc.imsave('outfile.jpg', array_image)
# 注意:上面的scipy版本会标准化所有图像,以便min(数据)变成黑色,max(数据)变成白色。
# 如果数据应该是精确的灰度级或准确的RGB通道,则解决方案为:
# 此时保存的图片样式与上面的方法有所区别
scipy.misc.toimage(array_image, cmin=0.0, cmax=255.0).save('outfile.jpg')


#接下来读取该图片,并得到其中的数据值,看与保存时的矩阵是否一致,此时在读取的时候发现内部还是做了标准化
image_pth = './outfile.jpg'
out_image = scipy.misc.imread(image_pth)
print(out_image.shape) # (6, 8, 3)
print(out_image)
print("*"*50)


### 2  使用自建矩阵实验,使用PIL模块
# img如果是uint16的矩阵而不转为uint8的话,Image.fromarray这句会报错TypeError: Cannot handle this data type
array_image = array_image.astype("uint8")
print(array_image)
im = Image.fromarray(array_image)
im.save('./outfile.jpg')

# 发现通过这种方法读取恢复与原始数据保持一致
im1 = Image.open('./outfile.jpg')
im1_array = np.array(im1)
print(im1_array)

下面是该矩阵保存下来的图片:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值