python3.6(anaconda)
skimage模块
加载必要的模块:import numpy as npfrom skimage import img_as_floatfrom skimage import io
读取图片:img=io.imread('0.png')[:,:,:3]得到一个数组,里面的元素都是介于0到255之间的整数。
查看图片的高度、宽度、通道数:row, col, channel = img.shape也就是行数、列数、通道数。
锁定图片的中心点:c_x = (col-1)/2.0c_y = (row-1)/2.0
构造与img行数和列数相同的二维数组:xmk = np.array([list(range(col))]*row)ymk = np.array([list(range(row))]*col)ymk = np.transpose(ymk)xxd = xmk - c_xyyd = c_y - ymk
xxd对应的图像:io.imshow(xxd)
yyd对应的图像。
对xxd和yyd进行如下处理:x = 20 * np.sin(2 * np.pi * yyd / 70) + xxdy = 20 * np.cos(2 * np.pi * xxd / 30) + yyd下面第一个图是x的图像,第二个图是y的图像。
然后这样处理:xn = x + c_xyn = c_y - y去掉了红颜色区域。
取整,再把数据类型转化为整数:zzx = np.floor (xn).astype(int)zzy = np.floor (yn).astype(int)
集中成一个数组:for i in range(row): for j in range (col): new_xx = zzx [i, j] new_yy = zzy [i, j] if xn [i, j] < 0 or xn [i, j] > col -1 : continue if yn [i, j] < 0 or yn [i, j] > row -1 : continue img0[i, j, :] = img[new_yy, new_xx, :]把img0导出为图片:io.imsave('1.png',img0)