【Python】Scipy處理圖片(ndimage shift rotate zoom)

例圖

在這裏插入圖片描述

一、灰度圖處理(二維)

可採用Scipy自帶圖片,亦可讀入本地圖片。misc.imread()方式讀入失敗,故這裏採用cv2.imread()讀入。

#圖片處理
import numpy as np
import scipy.misc as misc
import scipy.ndimage as ndimage

#黑白圖
#face =misc.face(gray =True)
#face = misc.imread('handsome.jpg')
import cv2
face = cv2.imread('handsome.jpg',cv2.IMREAD_GRAYSCALE)  #讀入灰度圖

import matplotlib.pyplot as plt
#misc.imshow(face)
#plt.imshow(face, cmp = 'gray')  # 'AxesImage' object has no property 'cmp'
plt.imshow(face,cmap =plt.cm.gray)

#圖片移動
face2 = ndimage.shift(face,shift = [300,150])# mode = {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
#plt.imshow(face2,cmap='gray') #invalid character in identifier
plt.imshow(face2,cmap =plt.cm.gray)

#圖片移動
face2 = ndimage.shift(face,shift = [100,100],mode = 'mirror')# mode = {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
#plt.imshow(face2,cmap='gray') #invalid character in identifier
plt.imshow(face2,cmap =plt.cm.gray)

#圖片旋轉
face3 = ndimage.rotate(face,angle = 180)
#plt.imshow(face3)
#plt.imshow(face3,cmap ='gray')
plt.imshow(face3,cmap =plt.cm.gray) 

#圖片縮放
face4 = ndimage.zoom(face,zoom = 0.5)
#plt.imshow(face4,cmap =plt.cm.gray) 
plt.imshow(face4,cmap ='gray') 

face4 = ndimage.zoom(face,zoom = 0.2)
plt.imshow(face4,cmap =plt.cm.gray) 

#圖片切割
face5 = face[:512,-512:]
plt.imshow(face5, cmap= 'gray')

或許我不應該選用帶人的圖片?
在這裏插入圖片描述

二、彩圖處理(三維)

步驟和上面的類似,就是看着需求操作罷了

import numpy as np
import scipy.misc as misc
import scipy.ndimage as ndimage
import matplotlib.pyplot as plt

import cv2
face = cv2.imread('handsome.jpg')  #讀入彩圖
#face =misc.face(gray =False)
#plt.imshow(face,cmap ='gray')
plt.imshow(face)

#圖片移動(三維)
face2 = ndimage.shift(face,shift = [0,500,0],mode = 'mirror')# mode = {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
#plt.imshow(face2,cmap='gray') #invalid character in identifier
plt.imshow(face2)

#圖片移動(三維)
face2 = ndimage.shift(face,shift = [400,-625,2],mode = 'mirror')# mode = {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
#plt.imshow(face2,cmap='gray') #invalid character in identifier
#plt.imshow(face2,cmap =plt.cm.gray)
cv2.imwrite('mirror.png',face2)

#圖片移動(三維)
face_wrap = ndimage.shift(face,shift = [400,-625,1],mode = 'wrap')# mode = {'reflect', 'constant', 'nearest', 'mirror', 'wrap'}
#plt.imshow(face2,cmap='gray') #invalid character in identifier
cv2.imwrite('wrap.png',face_wrap)

#圖片旋轉,三維二維都一樣
face3 = ndimage.rotate(face,angle = 180)
plt.imshow(face3)
#cv2.imwrite('rotate.png',face3)

#圖片縮放(三維)
face4 = ndimage.zoom(face,zoom = [0.1,0.1,1])
plt.imshow(face4,cmap =plt.cm.gray) 

#圖片縮放(三維)
face4 = ndimage.zoom(face,zoom = [2,2,1])
plt.imshow(face4,cmap ='gray') 

#plt.imsave('zoom_face.jpg',face4)
#plt.imsave('face.jpg',face)


plt.imshow(face+36,cmap = 'gray')

face = misc.face(gray = True)
face = face[:512,-512:]
plt.imshow(face,cmap ='gray')

在這裏插入圖片描述
在這裏插入圖片描述

三、濾波處理

import numpy as np
import scipy.misc as misc
import scipy.ndimage as ndimage
import matplotlib.pyplot as plt

#添加噪聲
face = misc.face(gray = True)
face = face+face.std()*0.8*np.random.random(face.shape)

#高斯濾波
face_g = ndimage.gaussian_filter(face,sigma = 1)#sigma越大越糊  
plt.imshow(face_g,cmap ='gray')

moon = plt.imread(r'E:\Document transfer\Tencent Files\1005634200\FileRecv\數據分析方法 週一56\第15周\moonlanding.png')
moon_g = ndimage.gaussian_filter(moon,sigma = 5)
plt.figure(figsize =(9,8))
plt.imshow(moon_g,cmap ='gray')


#中值濾波
face_m = ndimage.median_filter(face,size=8)
#plt.figure(figsize=(10,6))
plt.imshow(face_m,cmap = 'gray')


#維納濾波(可處理老照片)
import scipy.signal as signal
face_w = signal.wiener(face,mysize =2)
plt.imshow(face_w,cmap = 'gray')

在這裏插入圖片描述

參考資料

python scipy庫基礎學習(圖片消噪, 求解圓周率, Scipy文件輸入/輸出, scipy矩陣)

千鋒教育

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