注:__使用numpy庫來對圖像進行處理。__這裏咱們使用matplotlib.pyplot的相關方法來輔助。數組
處理圖像的時候,顏色都是使用RGB三個通道進行疊加而造成的一個顏色 _R:__紅色通道__G:__綠色__B: 藍色_微信
可使用三維的數組來表示一張圖片
最高維度0:__圖片的高度 次高維1:__圖片的寬度 最低維2:__RGB三個元素 mvc
In [2]:大數據
import numpy as np
import matplotlib.pyplot as pltui
說明:spa
In [62]:對象
a=plt.imread("1.jpg") # 將圖片信息讀取成數組信息
# 返回的信息是一個三維的數組
# 最高維度:一共有332個元素
# 次高維:一共有500個元素
# 最低維:每一個像素點的顏色信r g b
a #已知數組信息,使用imshow讀取成圖片
plt.imshow(a)
# 將數組信息存儲成圖片
plt.imsave("c:/numpy.jpg",a) blog
# 利用已學過的知識顯示數組a的形狀
print(a.shape) 索引
(332, 500, 3) 圖片
In [23]:
# (1)如何在ndarray數組中存儲一張圖片。
# 三維:最高維:高
# 次高維:寬
# 最低維:顏色
# 顏色的存儲:
# 在numpy中能夠有兩種形式:
# 3 rgb顏色值越大,圖片就越亮
# x=np.ones(shape=(100,200,3))#白色圖像,rgb[1,1,1]
# x=np.zeros(shape=(100,200,3))#黑色色圖像,rgb[0,0,0]
# x=np.full(shape=(100,200,3),fill_value=255)#rgb[255,255,255]
# plt.imshow(x)
# x=np.full(shape=(100,200,3),fill_value=148) # [148,148,148],[148,148,148],[148,148,148],[148,148,148],
# 使得rgb三個值都不一樣,可是圖像上的全部點的rgb顏色都一致,就是純色的其餘顏色的圖
# plt.imshow(x)
# 每一個下像素點的值[228,251,142]
# x=[228,251,142] # 不行 直接使用x進行賦值,不是在對x中的每一個元素進行賦值,而是將x跟其餘的數據對象進行了綁定。
# x[:,:] # 獲取圖像中的每一個rgb元素的值(列表)
# x[:,:]=[228,251,142]
# x[:]=[228,251,142] # 簡化,由於獲取的低維度所有獲取。
# plt.imshow(x)
Out[23]:
<matplotlib.image.AxesImage at 0x997aa20>
灰度圖的數據能夠當作是二維數組,元素取值爲0 ~ 255,其中,0爲黑色,255爲白色。從0到255逐漸由暗色變爲亮色。
灰度圖轉換(ITU-R 601-2亮度變換):
L = R * 299 / 1000 + G * 587 / 1000 + B * 114 / 1000
R,G,B爲最低維的數據。
顯示灰度圖時,須要在imshow中使用參數:
`cmap="gray"
`
In [36]:
# a# 三維的數組 最高維:高, 次高維:寬 最低維[R,G,B]
# b=np.array([0.299,0.587,0.114])
# x=np.dot(a,b) # 將上面的RGB和b數組中的每一個元素進行對位相乘,再相加,必定獲得的是一個數字L
# plt.imshow(x,cmap="gray")
# 目的是讓每一個rgb都變成一個數值,能夠去rgb三個數值中的最大值,最小值,或者是平均值。
# x=np.max(a,axis=2)
# plt.imshow(x,cmap="gray")
# x=np.min(a,axis=2)
# plt.imshow(x,cmap="gray")
# x=np.mean(a,axis=2)
# plt.imshow(x,cmap="gray")
Out[36]:
<matplotlib.image.AxesImage at 0xa492b00>
以上轉換爲標準的公式,咱們也能夠採用不正規的方式:
對於彩色圖像,能夠認爲是由RGB三個通道構成的。每一個最低維就是一個通道。分別提取R,G,B三個通道,並顯示單通道的圖像。
In [68]:
t=a.copy()
# 進行紅色通道的提取:就是將每一個像素點中的g和b,設置成0
# (1)獲取素有的像素點。
# (2)將每一個像素點中的第1個元素和第二個元素(g,b)設置成0
# [r,g,b]
# t[:,:,1:3]=0
# plt.imshow(t)
# 對藍色通道進行提取
# 將b不變,其他都設置成0
# t[:,:,0:2]=0
# plt.imshow(t)
# 對綠色通道進行提取
# 將g不變,其他都設置成0
# t[:,:,0:3:2]=0
# t[:,:,::2]=0
# plt.imshow(t)
# 獲取綠色通道,若是不使用切片,只使用索引
# 經過提供整數索引
# a=np.array([1,2,3,4,5])
# a[1],a[3],a[4]
# index=[1,3,4] #造成索引列表
# a[index]
t
# greenindex=[0,2]
# t[:,:,greenindex]=0
# 如下三種方法均可以
t[:,:,[0,2]]=0
t[:,:,0:3:2]=0
t[:,:,::2]=0
# plt.imshow(t)
# 一塊兒顯示
red=a.copy()
green=a.copy()
blue=a.copy()
red[:,:,1:3]=0
green[:,:,::2]=0
blue[:,:,:2]=0
fig,ax=plt.subplots(2,2)
fig.set_size_inches(15,15)
ax[0,0].imshow(a)
ax[0,1].imshow(red)
ax[1,0].imshow(green)
ax[1,1].imshow(blue)
Out[68]:
<matplotlib.image.AxesImage at 0xc6ab780>
In [74]:
t=a.copy()
# r=np.concatenate((t,t,t),axis=1)
# r=np.concatenate((t,t),axis=0)
# 先水平方向兩次,再垂直方向3次
r1=np.concatenate((t,t),axis=1)
r2=np.concatenate((r1,r1,r1),axis=0)
plt.imshow(r2)
Out[74]:
<matplotlib.image.AxesImage at 0xc52e4a8>
In [91]:
# li=[1,2,3,4,5]
# li[::-1]
# 得到ndarray數組下的每一列
# x=np.array([[1,2,3,4],
# [5,6,7,8]])
# x[1]
# x[:,1]
t=a.copy()
# t[:,::-1]
plt.imshow(t[:,::-1])
# 水平鏡面
# 至關於進行行交換,讓原來第0行,顯示在第n行
t=a.copy()
plt.imshow(t[::-1])
Out[91]:
<matplotlib.image.AxesImage at 0xf978ef0>
In [100]:
# 對於二維數組來講,行變列,列變行
x=np.array([[1,2,3],[4,5,6]])
print(x)
x.transpose()
# 向左旋轉90度
# (1)先tranpose
# t=a.copy()
# r=t.transpose(1,0,2)
# plt.imshow(r[::-1])
# 右旋轉90
# (1)轉置
t=a.copy()
# t.transpose(1,0,2)
r=t.swapaxes(0,1)
plt.imshow(r[:,::-1])
[[1 2 3]
[4 5 6]]
Out[100]:
<matplotlib.image.AxesImage at 0xfa8dfd0>
在圖像中,用綠色值代替之前的紅色值,用藍色值代替之前的綠色值,用紅色值代替之前的藍色值。
將圖像分紅若干塊子圖像(例如10 * 10),而後打亂各子圖像順序(拼圖)。
若是你以爲文章還不錯,請你們點贊分享下。
▼
文章詳情,請關注微信公衆號"Python爬蟲與大數據分析"