Numpy應用案例

Numpy應用案例

注:__使用numpy庫來對圖像進行處理。__這裏咱們使用matplotlib.pyplot的相關方法來輔助。數組

處理圖像的時候,顏色都是使用RGB三個通道進行疊加而造成的一個顏色 _R:__紅色通道__G:__綠色__B: 藍色_微信

可使用三維的數組來表示一張圖片
最高維度0:__圖片的高度 次高維1:__圖片的寬度 最低維2:__RGB三個元素 mvc

In [2]:大數據

import numpy as np
import matplotlib.pyplot as pltui


圖像讀取與顯示

  • plt.imread:讀取圖像,返回圖像的數組(三維數組)。
  • plt.imshow:顯示圖像。
  • plt.imsave:保存圖像。

說明:spa

  • imread方法默認只能處理png格式的圖像,若是須要處理其餘格式的圖像,須要安裝pillow庫。

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顏色值越大,圖片就越亮

一種是無符號 uint8 0-255

float類型 float 0-1

# 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>


灰度圖(2)

以上轉換爲標準的公式,咱們也能夠採用不正規的方式:

  • 使用最大值代替整個最低維
  • 使用最小值代替整個最低維
  • 使用平均值代替整個最低維

圖像顏色通道

對於彩色圖像,能夠認爲是由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

[r,g,b]

# t[:,:,0:2]=0
# plt.imshow(t)

# 對綠色通道進行提取
# 將g不變,其他都設置成0

[r,g,b]

# 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>


左右旋轉

  • 將圖像向左旋轉90 / 180度。
  • 將圖像向右旋轉90 / 180度。

In [100]:

# 對於二維數組來講,行變列,列變行
x=np.array([[1,2,3],[4,5,6]])
print(x)
x.transpose()

# 向左旋轉90度
# (1)先tranpose

(2)再作水平鏡面

# t=a.copy()
# r=t.transpose(1,0,2)
# plt.imshow(r[::-1])

# 右旋轉90
# (1)轉置

(2)作垂直鏡面

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爬蟲與大數據分析"

相關文章
相關標籤/搜索