在進(jìn)行圖像領(lǐng)域的深度學(xué)習(xí)的時(shí)候經(jīng)常需要對圖片進(jìn)行處理,包括圖像的翻轉(zhuǎn)宏粤,壓縮,截取等来农,一般都是用Numpy來處理沃于。處理起來也很方便繁莹。?
In[3]
# 導(dǎo)入需要的包
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# 讀入圖片
image = Image.open('./work/vehicle1.jpg')
image = np.array(image)
# 查看數(shù)據(jù)形狀,其形狀是[H, W, 3]薄风,
# 其中H代表高度溉跃, W是寬度,3代表RGB三個(gè)通道
image.shape
(437, 700, 3)
In[4]
# 原始圖片
plt.imshow(image)
<matplotlib.image.AxesImage at 0x7fb195078b10>
?
In[7]
# 垂直方向翻轉(zhuǎn)
# 這里使用數(shù)組切片的方式來完成龄糊,
# 相當(dāng)于將圖片最后一行挪到第一行炫惩,
# 倒數(shù)第二行挪到第二行他嚷,...,
# 第一行挪到倒數(shù)第一行
# 對于行指標(biāo),使用::-1來表示切片筋蓖,
# 負(fù)數(shù)步長表示以最后一個(gè)元素為起點(diǎn)卸耘,向左走尋找下一個(gè)點(diǎn)
# 對于列指標(biāo)和RGB通道,僅使用:表示該維度不改變
image2 = image[::-1, :, :]
plt.imshow(image2)
<matplotlib.image.AxesImage at 0x7fecfbfd15d0>
?
In[8]
# 水平方向翻轉(zhuǎn)
image3 = image[:, ::-1, :]
plt.imshow(image3)
<matplotlib.image.AxesImage at 0x7fecfbf3aa10>
?
In[5]
# 180度方向翻轉(zhuǎn)
image31 = image[::-1, ::-1, :]
plt.imshow(image31)
<matplotlib.image.AxesImage at 0x7fb194faaf10>
?
In[9]
# 保存圖片
im3 = Image.fromarray(image3)
im3.save('im3.jpg')
In[10]
#? 高度方向裁剪
H, W = image.shape[0], image.shape[1]
# 注意此處用整除粘咖,H_start必須為整數(shù)
H1 = H // 2
H2 = H
image4 = image[H1:H2, :, :]
plt.imshow(image4)
<matplotlib.image.AxesImage at 0x7fecfbeac6d0>
?
In[11]
#? 寬度方向裁剪
W1 = W//6
W2 = W//3 * 2
image5 = image[:, W1:W2, :]
plt.imshow(image5)
<matplotlib.image.AxesImage at 0x7fecfbe90390>
?
In[13]
# 兩個(gè)方向同時(shí)裁剪
image5 = image[H1:H2, \
? ? ? ? ? ? ? W1:W2, :]
plt.imshow(image5)
<matplotlib.image.AxesImage at 0x7fecfbd5c810>
?
In[14]
# 調(diào)整亮度
image6 = image * 0.5
plt.imshow(image6.astype('uint8'))
<matplotlib.image.AxesImage at 0x7fecfbd47d10>
?
In[15]
# 調(diào)整亮度
image7 = image * 2.0
# 由于圖片的RGB像素值必須在0-255之間蚣抗,
# 此處使用np.clip進(jìn)行數(shù)值裁剪
image7 = np.clip(image7, \
? ? ? ? a_min=None, a_max=255.)
plt.imshow(image7.astype('uint8'))
<matplotlib.image.AxesImage at 0x7fecfbcbb510>
?
In[16]
#高度方向每隔一行取像素點(diǎn)
image8 = image[::2, :, :]
plt.imshow(image8)
<matplotlib.image.AxesImage at 0x7fecfbc25850>
?
In[17]
#寬度方向每隔一列取像素點(diǎn)
image9 = image[:, ::2, :]
plt.imshow(image9)
<matplotlib.image.AxesImage at 0x7fecfbc08710>
?
In[18]
#間隔行列采樣,圖像尺寸會(huì)減半瓮下,清晰度變差
image10 = image[::2, ::2, :]
plt.imshow(image10)
image10.shape
(219, 350, 3)
?