Python实现PS滤镜特效之扇形变换效果示例


Posted in Python onJanuary 26, 2018

本文实例讲述了Python实现PS滤镜特效之扇形变换效果。分享给大家供大家参考,具体如下:

这里用 Python 实现 PS 滤镜中的一种几何变换特效,称为扇形变换,将图像扭曲成一个扇形,具体的算法原理和效果图可以参考附录说明

import numpy as np
from skimage import img_as_float
import matplotlib.pyplot as plt
from skimage import io
import math
import numpy.matlib
file_name2='D:/Visual Effects/PS Algorithm/4.jpg'
img=io.imread(file_name2)
img = img_as_float(img)
# control the radius of the inner circle
radius = 150
# control the distance between the inner circle and outer circle
high = 200
angle = 0
spreadAngle = math.pi
# set the center of the circle, proportion of the image size
centerX = 0.5
centerY = 1.0
row, col, channel = img.shape
icenterX = col * centerX
icenterY = row * centerY
img_out = img * 0
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)
xx_dif = x_mask - icenterX
yy_dif = y_mask - icenterY
theta = np.arctan2(-yy_dif, -xx_dif+0.0001)
r = np.sqrt(xx_dif*xx_dif + yy_dif * yy_dif)
theta = np.mod(theta, 2 * math.pi)
x1_mask = col * theta/(spreadAngle+0.00001)
y1_mask = row * (1-(r-radius)/(high+0.00001))
'''
mask = x1_mask < 0
x1_mask = x1_mask * (1 - mask)
mask = x1_mask > (col - 1)
x1_mask = x1_mask * (1 - mask) + (x1_mask * 0 + col -2) * mask
mask = y1_mask < 0
y1_mask = y1_mask * (1 - mask)
mask = y1_mask > (row -1)
y1_mask = y1_mask * (1 - mask) + (y1_mask * 0 + row -2) * mask
'''
int_x = np.floor (x1_mask)
int_x = int_x.astype(int)
int_y = np.floor (y1_mask)
int_y = int_y.astype(int)
for ii in range(row):
  for jj in range (col):
    new_xx = int_x [ii, jj]
    new_yy = int_y [ii, jj]
    if x1_mask [ii, jj] < 0 or x1_mask [ii, jj] > col -1 :
      continue
    if y1_mask [ii, jj] < 0 or y1_mask [ii, jj] > row -1 :
      continue
    img_out[ii, jj, :] = img[new_yy, new_xx, :]
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()

附录:PS 滤镜— —扇形warp

clc;
  clear all;
  close all;
  addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm');
  I=imread('4.jpg');
  I=double(I);
  Image=I/255;
  [height, width, depth]=size(Image);
  % set the parameters
  radius = 150; % control the radius of the inner circle
  high = 200;  % control the distance between the inner circle and outer circle
  angle = 0;       
  spreadAngle=pi;  
  centerX = 0.5; % set the center of the circle, proportion of the image size
  centerY = 1.0;
  icenterX=width*centerX;
  icenterY=height*centerY;
  Image_new=Image*0;
  for i=1:height
    for j=1:width
      dx=j-icenterX;
      dy=i-icenterY;
      theta=atan2(-dy, -dx)+angle;
      r=sqrt(dy*dy+dx*dx);
      theta=mod(theta, 2*pi);
      x=width * theta/(spreadAngle+0.00001);
      y=height * (1-(r-radius)/(high+0.00001));
  % %     if (x<=1)   x=1; end
  % %     if (x>=width)  x=width-1; end;
  % %     if (y>=height) y=height-1; end;
  % %     if (y<1) y=1;   end;
  % %     
      if (x<=1)   continue; end
      if (x>=width)  continue; end;
      if (y>=height) continue; end;
      if (y<1) continue;   end;
      x1=floor(x);
      y1=floor(y);
      p=x-x1;
      q=y-y1;
      Image_new(i,j,:)=(1-p)*(1-q)*Image(y1,x1,:)+p*(1-q)*Image(y1,x1+1,:)...
        +q*(1-p)*Image(y1+1,x1,:)+p*q*Image(y1+1,x1+1,:);
    end
  end
  imshow(Image_new)
  imwrite(Image_new, 'out.jpg');

参考来源:http://www.jhlabs.com/index.html

本例Python运行效果:

原图

Python实现PS滤镜特效之扇形变换效果示例

效果图

Python实现PS滤镜特效之扇形变换效果示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
浅谈Python单向链表的实现
Dec 24 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
Django如何配置mysql数据库
May 04 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
django框架防止XSS注入的方法分析
Jun 21 Python
python基于Selenium的web自动化框架
Jul 14 Python
详解Python打包分发工具setuptools
Aug 05 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 #Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 #Python
Python使用pickle模块存储数据报错解决示例代码
Jan 26 #Python
python如何重载模块实例解析
Jan 25 #Python
Python进程间通信Queue实例解析
Jan 25 #Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 #Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 #Python
You might like
PHP HTML代码串截取代码
2008/12/29 PHP
PHP求最大子序列和的算法实现
2011/06/24 PHP
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
vue项目中axios使用详解
2018/02/07 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python版名片管理系统
2018/11/30 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
keras slice layer 层实现方式
2020/06/11 Python
零基础小白多久能学会python
2020/06/22 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
美国时尚女装在线:Missguided
2016/12/03 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
Java语言程序设计测试题判断题部分
2013/01/06 面试题
幼儿运动会邀请函
2014/01/17 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
劳动保障个人工作总结
2015/03/04 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python
Golang bufio详细讲解
2022/04/21 Golang