Numpy處理圖片方法

在進(jìn)行圖像領(lǐng)域的深度學(xué)習(xí)的時(shí)候經(jīng)常需要對(duì)圖片進(jìn)行處理,包括圖像的翻轉(zhuǎn),壓縮,截取等,一般都是用Numpy來(lái)處理。處理起來(lái)也很方便。?

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ù)組切片的方式來(lái)完成,

# 相當(dāng)于將圖片最后一行挪到第一行,

# 倒數(shù)第二行挪到第二行,...,

# 第一行挪到倒數(shù)第一行

# 對(duì)于行指標(biāo),使用::-1來(lái)表示切片,

# 負(fù)數(shù)步長(zhǎng)表示以最后一個(gè)元素為起點(diǎn),向左走尋找下一個(gè)點(diǎn)

# 對(duì)于列指標(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)

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容