Python: PS 滤镜特效 -- Marble Filter

2023-12-05 11:48

本文主要是介绍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 pltdef Init_arr(): B = 256P = 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 = 1e6for i in range(B+1):P[i] = ig1[i] = (((math.floor(random.random()*N_max)) % (2*B))-B)*1.0/Bg2[i, :] = (np.mod((np.floor(np.random.rand(1, 2)*N_max)), (2*B))-B)*1.0/Bg2[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/Bg3[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) % BP [i] = P [j]P [j] = kP[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, g3def Noise_2(x_val, y_val, P, g2):BM=255N=4096t = x_val + Nbx0 = ((np.floor(t).astype(int)) & BM) + 1bx1 = ((bx0 + 1).astype(int) & BM) + 1rx0 = t - np.floor(t)rx1 = rx0 - 1.0t = y_val + Nby0 = ((np.floor(t).astype(int)) & BM) + 1by1 = ((bx0 + 1).astype(int) & BM) + 1ry0 = t - np.floor(t)ry1 = rx0 - 1.0sx = rx0 * rx0 * (3 - 2.0 * rx0)sy = ry0 * ry0 * (3 - 2.0 * ry0)row, col = x_val.shapeq1 = 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 outfile_name='D:/Visual Effects/PS Algorithm/4.jpg';
img=io.imread(file_name)img = img_as_float(img)
row, col, channel = img.shapexScale = 25.0
yScale = 25.0
turbulence =0.25xx = 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 / yScaleIndex = 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.imshow(img)
plt.axis('off');plt.figure(2)
plt.imshow(img_out)
plt.axis('off');plt.show();        

图像的效果可以参考我之前写的博客:

http://blog.csdn.net/matrix_space/article/details/46789607

这篇关于Python: PS 滤镜特效 -- Marble Filter的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457456

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四