例圖
一、灰度圖處理(二維)
可採用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矩陣)
千鋒教育