卷积操作 示例代码 # coding: utf-8 from PIL import Image import numpy as np import os im = np.array(Image.open('/Users/yuanye/Desktop/yuanye.png')) print(im); print(im[0][0]) print(len(im)) print(len(im[0])) print(len(im[0][0])) im_grey = Image.open('/Users/yuanye/Desktop/yuanye.png') im_grey = im_grey.convert('L') try: im_grey.save('yuanyeGrey.png'); except IOError: print('Cannot convert'); im_grey.show(); im_grey = np.array(im_grey); conv_a = np.array([[-1,-1,-1], [-1,8,-1], [-1,-1,-1]])#卷积核 def conv(im_array,conv_x): im_copy = im_array.copy(); height,width = im_copy.shape for i in range(0,height-2): for j in range(0,width-2): tmp = (im_array[(i):(i+3),(j):(j+3)]*conv_x).sum() if tmp>255: tmp = 255 elif tmp<0: tmp = 0; im_copy[i][j] = tmp; return im_copy; im_conv = conv(im_grey,conv_a); new_im = Image.fromarray(im_conv) new_im.show();
池化操作:
# coding utf-8 from PIL import Image import numpy as np import os im_conv = Image.open('/Users/yuanye/Desktop/DSC0266.jpg') im_conv = np.array(im_conv); def pooling(im_array): height,width,_ = im_array.shape pool =[[ 0 for col in range((int)(width/10))] for row in range((int)(height/10))] p,q=[0,0] for i in range(0,height-10,10): q= 0; for j in range(0,width-10,10): pool[p][q] = np.uint8(im_array[(i):(i+10),(j):(j+10)].mean())//最大池化的话 可以换成.max() q = q+1; p = p+1 return pool im_pool = pooling(im_conv); im_pool = np.array(im_pool); new_im = Image.fromarray(im_pool) new_im.show(); new_im.save("poolingImage1.png");
平均池化,