Python資料分析中的Numpy影象處理實操!

Numpy應用案例

注:使用numpy庫來對影象進行處理。這裡我們使用matplotlib.pyplot的相關方法來輔助。處理影象的時候,顏色都是使用RGB三個通道進行疊加而形成的一個顏色 R:紅色通道G:綠色B: 藍色可以使用三維的陣列來表示一張圖片

最高維度0:圖片的高度 次高維1:圖片的寬度 最低維2:RGB三個元素

In [2]:

import numpy as np

import matplotlib。pyplot as plt

影象讀取與顯示

plt。imread:讀取影象,返回影象的陣列(三維陣列)。

plt。imshow:顯示影象。

plt。imsave:儲存影象。

說明:

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)

# 利用已學過的知識顯示陣列a的形狀

print(a。shape)

(332, 500, 3)

Python資料分析中的Numpy影象處理實操!

顯示純色影象

顯示白色影象

顯示黑色影象

顯示指定顏色影象

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]:

Python資料分析中的Numpy影象處理實操!

轉換為灰度圖

灰度圖的資料可以看成是二維陣列,元素取值為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]:

Python資料分析中的Numpy影象處理實操!

灰度圖(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]:

Python資料分析中的Numpy影象處理實操!

影象重複

將影象沿著水平方向重複三次。

將影象沿著垂直方向重複兩次。

將影象沿著水平方向重複兩次,垂直重複三次。

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]:

Python資料分析中的Numpy影象處理實操!

影象鏡面對稱

將影象水平鏡面轉換。

將影象垂直鏡面轉換。

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]:

Python資料分析中的Numpy影象處理實操!

左右旋轉

將影象向左旋轉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]:

Python資料分析中的Numpy影象處理實操!

顏色轉換

在影象中,用綠色值代替以前的紅色值,用藍色值代替以前的綠色值,用紅色值代替以前的藍色值。

顏色遮擋 / 疊加

在指定的區域使用特定的純色去遮擋影象。

在指定的區域使用隨機生成的影象去遮擋影象。

使用小影象放在大影象上。

影象分塊亂序

將影象分成若干塊子影象(例如10 * 10),然後打亂各子影象順序(拼圖)。

如果你覺得文章還不錯,請大家點贊分享下。你的肯定是我最大的鼓勵和支援。

更多幹貨分享,請關注公眾號Python爬蟲與大資料分析呀!

Python資料分析中的Numpy影象處理實操!