Python學習part5:基本圖像操作

Python學習part5:基本圖像操作

讓我們介紹一下python的圖像處理
首先簡單的圖像處理,主要包括的庫有OpenCV、PIL(Python Imaging
Library)、skimage、 matplotlib
進階的圖像操作則需要用到numpy、pandas。(這兩個庫在本質上都是進
行科學計算的庫)
下面放出基本圖像操作的代碼與操作


from PIL import Image#引入PIL

import numpy as np#引入numpy
#matplotlib.pylab和PIL引入圖片爲RGB
import matplotlib.pylab as plt
#cv2引入圖片爲BGR
import cv2

img=Image.open('C:/Users/admin/Desktop/圖片/nb1.jpg')
img1=plt.imread('C:/Users/admin/Desktop/圖片/nb1.jpg')
print(img1.shape)#shape只能在matplotlib.pylab使用
print(img.size)#輸出尺寸
print(img.mode)#輸出mode

plt.imshow(img)#imshow和show需同時存在,否則圖像無法呈現
plt.show()
plt.axis('off')#加完plt.axis('off')去掉座標軸
plt.imshow(img)
plt.show()

img.save('2.jpg')#對圖像修改過後保存圖片

r,g,b=img.split()#分離三通道R,G,B
r.show()
g.show() 
b.show()
'''
r.save('C:/Users/admin/Desktop/圖片/R.jpg')
g.save('C:/Users/admin/Desktop/圖片/G.jpg')
b.save('C:/Users/admin/Desktop/圖片/B.jpg')
'''
#疊加圖片
img2 = Image.open('C:/Users/admin/Desktop/圖片/nb1.jpg')
img3 = Image.open('C:/Users/admin/Desktop/圖片/nb2.jpg')
a=img2.resize((400,400))#疊加圖片前提需要相同格式大小的圖片
b=img3.resize((400,400))#通過resize
c=Image.blend(a,b,0.5)#0.5指兩幅圖的參數比例
c.save('C:/Users/admin/Desktop/圖片/shuai.jpg')
c.show()
d=c.rotate(45)#rotate指逆時針旋轉45度
d.show()

#圖片裁剪(只能在matplotlib.pylab使用)
img1=plt.imread('C:/Users/admin/Desktop/圖片/nb1.jpg')
h=img1[200:2800,:2000,:]#截x軸200到2800,y軸到2000,z軸不做處理(z軸指圖像深度)
plt.imshow(h)
plt.show()

#顏色轉換(利用愛因斯坦約定方程對圖像進行操作,轉載)
im=plt.imread('C:/Users/admin/Desktop/圖片/shuai.jpg')
def do_normalise(im):
  return -np.log(1/((1 + im)/257) - 1) #

def undo_normalise(im):
  return (1/(np.exp(-im) + 1) * 257 - 1).astype("uint8")
def rotation_matrix(theta):
  return np.c_[
   [1,0,0],
   [0,np.cos(theta),-np.sin(theta)],
   [0,np.sin(theta),np.cos(theta)]
 ]
im_normed = do_normalise(im)
im_rotated = np.einsum("ijk,lk->ijl", im_normed, rotation_matrix(np.pi))  # 利用愛因斯坦求和約定做矩陣乘法,實際上是將每個RGB像素點表示的三維空間點繞X軸(即紅色通道軸)旋轉180°。
im2 = undo_normalise(im_rotated)                                          
plt.axis('off')
plt.imshow(im2)
plt.show()

爲了讓讀者更清楚的瞭解過程,我進行簡單的圖片介紹
圖片1
在這裏插入圖片描述
進行RGB通道分離的圖片

import numpy as np
from PIL import Image
img=np.array(Image.open('C:/Users/admin/Desktop/photo/nb1.jpg'))#將圖片轉化爲數組
img*=np.array([1,0,0]).astype(np.uint8)#將通道分離出來,其餘兩通道爲0,參數課以改變顏色深淺
a=Image.fromarray(img)#將數組轉化爲圖片
a.show()
#fromarray和array所在的函數庫不一樣,一個是Image,一個是np

效果圖
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這是兩張照片疊加的圖片效果
在這裏插入圖片描述
顏色變換後的效果
在這裏插入圖片描述
注:彩色圖一般是三通道(不算背景板)
黑白圖是單通道(例:灰度值)

Ending!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章