工具癖Python3机器学习读书

Python3机器学习实践:卷积神经网络篇一 图像

2019-05-10  本文已影响9人  AiFany
f20fd8e72558a8227882c10049229e9.jpg

图像是由一个个像素点构成,每个像素点有三个通道,分别对应R,G,B。彩色RGB图像其实是一个三维矩阵,矩阵中的每个数字(0到255)代表的是一个像素一个通道的灰度。下面举例说明:

image image image
一、读取这个图片的三维矩阵
# -*- coding:utf-8 -*-
# &Author  AnFany

from skimage import io

fig_path = r"C:\Users\GWT9\Desktop\af.png"
matrix = io.imread(fig_path)  
print(matrix, matrix.shape)
[[[137 198 182] 
 [126 189 172]  
[112 178 164]  
... 
 [106 220 210]  
[ 94 208 198] 
 [ 96 210 202]]

... 

[[210 227 211] 
 [199 216 200] 
 [213 227 214] 
 ... 
 [142 204 193] 
 [147 207 197] 
 [151 211 199]]] (189, 149, 3)
二、获取3个通道的矩阵以及维度
# -*- coding:utf-8 -*-
# &Author  AnFany

from skimage import io
from PIL import Image

fig_path = r"C:\Users\GWT9\Desktop\af.png"   # 图片路径
matrix = io.imread(fig_path)

R = matrix[:, :, 0]  # 获取R通道
G = matrix[:, :, 1]  # 获取G通道
B = matrix[:, :, 2]  # 获取B通道

print('R通道矩阵:\n', R, '维度:', R.shape)
print('G通道矩阵:\n', G, '维度:', G.shape)
print('B通道矩阵:\n', B, '维度:', B.shape)
R通道矩阵:
 [[137 126 112 ... 106  94  96]
 [153 171 154 ... 114 100 116]
 [144 137 137 ... 112 106 125]
 ...
 [218 216 206 ... 136 140 140]
 [221 210 211 ... 139 143 145]
 [210 199 213 ... 142 147 151]] 维度: (189, 149)
G通道矩阵:
 [[198 189 178 ... 220 208 210]
 [214 233 220 ... 226 212 227]
 [206 199 201 ... 220 214 235]
 ...
 [232 230 222 ... 202 204 203]
 [235 224 227 ... 203 205 207]
 [227 216 227 ... 204 207 211]] 维度: (189, 149)
B通道矩阵:
 [[182 172 164 ... 210 198 202]
 [198 218 206 ... 214 200 218]
 [191 184 187 ... 207 201 224]
 ...
 [219 217 211 ... 188 190 192]
 [222 211 216 ... 189 192 194]
 [211 200 214 ... 193 197 199]] 维度: (189, 149)
三、根据每个通道的数字矩阵输出图片
# -*- coding:utf-8 -*-
# &Author  AnFany

from skimage import io
from PIL import Image

fig_path = r"C:\Users\GWT9\Desktop\af.png"   # 图片路径
matrix = io.imread(fig_path)

R = matrix[:, :, 0]  # 获取R通道
G = matrix[:, :, 1]  # 获取G通道
B = matrix[:, :, 2]  # 获取B通道

R_image = Image.fromarray(R)
R_image.show()
R_image.save(r"C:\Users\GWT9\Desktop\af_R.png")

G_image = Image.fromarray(G)
G_image.show()
G_image.save(r"C:\Users\GWT9\Desktop\af_G.png")

B_image = Image.fromarray(B)
B_image.show()
B_image.save(r"C:\Users\GWT9\Desktop\af_B.png")
  1. R通道


    image
  2. G通道

image
  1. B通道
image
四、根据数字矩阵输出图片

因为像素值均是0-255内的数字,因此要保证数字矩阵的数字在此范围内,可以设置数字的格式为uint8。

# -*- coding:utf-8 -*-
# &Author  AnFany

from PIL import Image
import numpy as np

# 三维数字矩阵
R = np.arange(-800, 100, 0.5, dtype=np.uint8).reshape(30, 20, 3)
R_image = Image.fromarray(R)
R_image.show()

如果不转换数字格式,也可以为输出的图设定mode,例如mode设置为'RGB',但是此时数字矩阵和读取生成的图片的矩阵是不同的。

# -*- coding:utf-8 -*-
# &Author  AnFany

from PIL import Image
import numpy as np

# 三维数字矩阵
R = np.arange(-800, 100, 0.5).reshape(30, 20, 3)
R_image = Image.fromarray(R, mode='RGB')  # 设置mode
R_image.show()

或将数字矩阵中的数字首先变为整数形式,然后小于0的按0计算,大于255的按255计算,这种转换和直接将数字进行uint8转换得到的是不同的,最后在转换为uint8的格式进行图片的输出。

# &Author  AnFany

from PIL import Image
import numpy as np

# 三维数字矩阵
R = np.arange(-800, 100, 0.5).reshape(30, 20, 3)
# 进行转换
R[R < 0] = 0
R[R > 255] = 255
R_image = Image.fromarray(np.uint8(R)) # 转为uint8的格式
R_image.show()

项目地址卷积神经网络CNN,扫描下方二维码或者微信公众号直接搜索”Python范儿“,关注微信公众号pythonfan, 获取更多实例和代码。

pythonfan.jpg
上一篇 下一篇

猜你喜欢

热点阅读