多语言展示
当前在线:1863今日阅读:84今日分享:32

用python把图片转化为波浪效果

本文介绍一下,把图像变成波浪的效果。下图是原始图像。
工具/原料
1

python3.6(anaconda)

2

skimage模块

方法/步骤
1

加载必要的模块:import numpy as npfrom skimage import img_as_floatfrom skimage import io

2

读取图片:img=io.imread('0.png')[:,:,:3]得到一个数组,里面的元素都是介于0到255之间的整数。

4

查看图片的高度、宽度、通道数:row, col, channel = img.shape也就是行数、列数、通道数。

5

锁定图片的中心点:c_x = (col-1)/2.0c_y = (row-1)/2.0

6

构造与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

7

xxd对应的图像:io.imshow(xxd)

8

yyd对应的图像。

9

对xxd和yyd进行如下处理:x = 20 * np.sin(2 * np.pi * yyd / 70) + xxdy = 20 * np.cos(2 * np.pi * xxd / 30) + yyd下面第一个图是x的图像,第二个图是y的图像。

10

然后这样处理:xn = x + c_xyn = c_y - y去掉了红颜色区域。

11

取整,再把数据类型转化为整数:zzx = np.floor (xn).astype(int)zzy = np.floor (yn).astype(int)

12

集中成一个数组: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)

推荐信息