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的Django框架中获取单个对象数据的简单方法
Jul 17 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
Python jieba库用法及实例解析
Nov 04 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
python异常处理之try finally不报错的原因
May 18 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
Python Opencv图像处理基本操作代码详解
Aug 31 Python
最新pycharm安装教程
Nov 18 Python
python图像处理 PIL Image操作实例
Apr 09 Python
Python经常使用的一些内置函数
Apr 11 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环境搭建最新方法
2006/09/05 PHP
打造计数器DIY三步曲(中)
2006/10/09 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
取得一定长度的内容,处理中文
2006/12/20 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
详解webpack自动生成html页面
2017/06/29 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
处理Python中的URLError异常的方法
2015/04/30 Python
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
python主线程捕获子线程的方法
2018/06/17 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
函授生自我鉴定
2014/03/25 职场文书
房屋出租协议书
2014/04/10 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
找工作求职信
2014/07/07 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
2015年试用期工作总结
2014/12/12 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
班级班风口号大全
2015/12/25 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
vue中data里面的数据相互使用方式
2022/06/05 Vue.js