Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例


Posted in Python onJanuary 29, 2018

本文实例讲述了Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果。分享给大家供大家参考,具体如下:

这里用 Python 实现 PS 滤镜特效,Marble Filter, 这种滤镜使图像产生不规则的扭曲,看起来像某种玻璃条纹, 具体的代码如下:

import numpy as np
import math
import numpy.matlib
from skimage import io
import random
from skimage import img_as_float
import matplotlib.pyplot as plt
def Init_arr():
  B = 256
  P = np.zeros((B+B+2, 1))
  g1 = np.zeros((B+B+2, 1))
  g2 = np.zeros((B+B+2, 2))
  g3 = np.zeros((B+B+2, 3))
  N_max = 1e6
  for i in range(B+1):
    P[i] = i
    g1[i] = (((math.floor(random.random()*N_max)) % (2*B))-B)*1.0/B
    g2[i, :] = (np.mod((np.floor(np.random.rand(1, 2)*N_max)), (2*B))-B)*1.0/B
    g2[i, :] = g2[i, :] / np.sum(g2[i, :] **2)
    g3[i, :] = (np.mod((np.floor(np.random.rand(1, 3)*N_max)), (2*B))-B)*1.0/B
    g3[i, :] = g3[i, :] / np.sum(g3[i, :] **2)
  for i in range(B, -1, -1):
    k = P[i]
    j = math.floor(random.random()*N_max) % B
    P [i] = P [j]
    P [j] = k
  P[B+1:2*B+2]=P[0:B+1];
  g1[B+1:2*B+2]=g1[0:B+1];
  g2[B+1:2*B+2, :]=g2[0:B+1, :]
  g3[B+1:2*B+2, :]=g3[0:B+1, :]
  P = P.astype(int)
  return P, g1, g2, g3
def Noise_2(x_val, y_val, P, g2):
  BM=255
  N=4096
  t = x_val + N
  bx0 = ((np.floor(t).astype(int)) & BM) + 1
  bx1 = ((bx0 + 1).astype(int) & BM) + 1
  rx0 = t - np.floor(t)
  rx1 = rx0 - 1.0
  t = y_val + N
  by0 = ((np.floor(t).astype(int)) & BM) + 1
  by1 = ((bx0 + 1).astype(int) & BM) + 1
  ry0 = t - np.floor(t)
  ry1 = rx0 - 1.0
  sx = rx0 * rx0 * (3 - 2.0 * rx0)
  sy = ry0 * ry0 * (3 - 2.0 * ry0)
  row, col = x_val.shape
  q1 = np.zeros((row, col ,2))
  q2 = q1.copy()
  q3 = q1.copy()
  q4 = q1.copy()
  for i in range(row):
    for j in range(col):
      ind_i = P[bx0[i, j]]
      ind_j = P[bx1[i, j]]
      b00 = P[ind_i + by0[i, j]]
      b01 = P[ind_i + by1[i, j]]
      b10 = P[ind_j + by0[i, j]]
      b11 = P[ind_j + by1[i, j]]
      q1[i, j, :] = g2[b00, :]
      q2[i, j, :] = g2[b10, :]
      q3[i, j, :] = g2[b01, :]
      q4[i, j, :] = g2[b11, :]
  u1 = rx0 * q1[:, :, 0] + ry0 * q1[:, :, 1]
  v1 = rx1 * q2[:, :, 0] + ry1 * q2[:, :, 1]
  a = u1 + sx * (v1 - u1)
  u2 = rx0 * q3[:, :, 0] + ry0 * q3[:, :, 1]
  v2 = rx1 * q4[:, :, 0] + ry1 * q4[:, :, 1]
  b = u2 + sx * (v2 - u2)
  out = (a + sy * (b - a)) * 1.5
  return out
file_name='D:/Visual Effects/PS Algorithm/4.jpg';
img=io.imread(file_name)
img = img_as_float(img)
row, col, channel = img.shape
xScale = 25.0
yScale = 25.0
turbulence =0.25
xx = np.arange (col)
yy = np.arange (row)
x_mask = numpy.matlib.repmat (xx, row, 1)
y_mask = numpy.matlib.repmat (yy, col, 1)
y_mask = np.transpose(y_mask)
x_val = x_mask / xScale
y_val = y_mask / yScale
Index = np.arange(256)
sin_T=-yScale*np.sin(2*math.pi*(Index)/255*turbulence);
cos_T=xScale*np.cos(2*math.pi*(Index)/255*turbulence)
P, g1, g2, g3 = Init_arr()
Noise_out = Noise_2(x_val, y_val, P, g2)
Noise_out = 127 * (Noise_out + 1)
Dis = np.floor(Noise_out)
Dis[Dis>255] = 255
Dis[Dis<0] = 0
Dis = Dis.astype(int)
img_out = img.copy()
for ii in range(row):
  for jj in range(col):
    new_x = jj + sin_T[Dis[ii, jj]]
    new_y = ii + cos_T[Dis[ii, jj]]
    if (new_x > 0 and new_x < col-1 and new_y > 0 and new_y < row-1):
      int_x = int(new_x)
      int_y = int(new_y)
      img_out[ii, jj, :] = img[int_y, int_x, :]
plt.figure(1)
plt.title('3water.com')
plt.imshow(img)
plt.axis('off');
plt.figure(2)
plt.title('3water.com')
plt.imshow(img_out)
plt.axis('off');
plt.show();

运行效果:

Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例

Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例

Python 相关文章推荐
python学习笔记:字典的使用示例详解
Jun 13 Python
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
python try 异常处理(史上最全)
Mar 07 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
Python切图九宫格的实现方法
Oct 10 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
学python爬虫能做什么
Jul 29 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
图文详解matlab原始处理图像几何变换
Jul 09 Python
Python实现识别手写数字大纲
Jan 29 #Python
django文档学习之applications使用详解
Jan 29 #Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 #Python
python实现识别手写数字 python图像识别算法
Mar 23 #Python
Python实现简易版的Web服务器(推荐)
Jan 29 #Python
python实现图像识别功能
Jan 29 #Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 #Python
You might like
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python while 循环使用的简单实例
2016/06/08 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
帕克纽约:PARKER NY
2018/12/09 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
大学毕业生通用求职信
2013/09/28 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
2014年工程工作总结
2014/11/25 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
上学路上观后感
2015/06/16 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang