Python实现PS图像抽象画风效果的方法
时间:2019-04-13
本文章向大家介绍Python实现PS图像抽象画风效果的方法,主要包括Python实现PS图像抽象画风效果的方法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了Python实现PS图像抽象画风效果的方法。分享给大家供大家参考,具体如下:
今天介绍一种基于图像分割和color map 随机采样生成一种抽象画风的图像特效,简单来说,就是先生成一张 color map 图,颜色是渐变的,然后针对要处理的图像,进行分割,这里用的是 SLIC 分割算法,然后从 color map 中随机采样,将采样得到的像素值赋予分割后的图像区域。
# -*- coding: utf-8 -*- """ Created on Sun Aug 20 08:31:04 2017 @author: shiyi """ import numpy as np import matplotlib.pyplot as plt from skimage import io from skimage.segmentation import slic import numpy.matlib import random file_name='D:/Visual Effects/PS Algorithm/9.jpg'; img=io.imread(file_name) row, col, channel = img.shape # define the colormap color_map = img.copy() rNW = 0.5 rNE = 1.0 rSW = 0.0 rSE = 0.5 gNW = 0.0 gNE = 0.5 gSW = 0.0 gSE = 1.0 bNW = 1.0 bNE = 0.0 bSW = 0.5 bSE = 0.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) fx = x_mask * 1.0 / col fy = y_mask * 1.0 / row p = rNW + (rNE - rNW) * fx q = rSW + (rSE - rSW) * fx r = ( p + (q - p) * fy ) r[r<0] = 0 r[r>1] =1 p = gNW + (gNE - gNW) * fx q = gSW + (gSE - gSW) * fx g = ( p + (q - p) * fy ) g[g<0] = 0 g[g>1] =1 p = bNW + (bNE - bNW) * fx q = bSW + (bSE - bSW) * fx b = ( p + (q - p) * fy ) b[b<0] = 0.0 b[b>1] = 1.0 color_map[:, :, 0] = r * 255 color_map[:, :, 1] = g * 255 color_map[:, :, 2] = b * 255 # segment the image N_block = 100 segments = slic(img, n_segments=N_block, compactness=10) # plt.imshow(segments, plt.cm.gray) seg_img = img.copy() T_mask = img.copy() for i in range(N_block): mask = (segments == i) T_mask[:, :, 0] = mask T_mask[:, :, 1] = mask T_mask[:, :, 2] = mask x_ind = int(random.random() * (col-1)) y_ind = int(random.random() * (row-1)) color = color_map[y_ind, x_ind, :] T_img = seg_img * T_mask T_img = color seg_img = seg_img * (1-T_mask) + T_img * T_mask plt.figure(2) plt.imshow(seg_img) plt.show()
原图:
效果图:
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
- 死亡不可避免,但何时死,人工智能或有发言权
- 打开手机的这个功能,微信支付宝不怕盗刷!
- 手把手教你cuda5.5与VS2010的编译环境搭建
- Apache实现反向代理负载均衡
- linux下Apache服务器使用入门----httpd.conf
- linux下JBOSS使用入门
- CentOS下重新安装JDK,避免OpenJDK干扰
- linux虚拟机与winodows共享文件夹----linux安装VMware tools
- 虚拟机vmware与本地磁盘共享方法
- ADX3000二层的负载均衡设计问题
- cuda by example
- ADX3000的组网配置
- cuda编程知识普及
- 服务器负载监控以及文字处理脚本
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 「通信框架Netty4 源码解读(一)」起步,关于IO的简单总结,模拟一个redis客户端
- Unet实现文档图像去噪、去水印
- 「influxDB 原理与实践(一)」安装部署,实现基础的添加删除查询功能
- 「influxDB 原理与实践(二)」详解influxDB的写入与查询
- Nginx系列:https配置
- 笛卡尔积、等值连接、自然连接、外连接一文看懂
- nginx系列:常用利用shell统计日志
- Nginx系列:图片过滤处理
- Nginx系列:几款负载均衡第三方插件的安装与使用
- 「高并发通信框架Netty4 源码解读(三)」NIO缓冲区Buffer详解
- UML类图符号:各种关系说明以及举例
- 「高并发通信框架Netty4 源码解读(四)」NIO缓冲区之字节缓冲区ByteBuffer详解
- 「influxDB 原理与实践(三)」连续查询
- 为什么使用OPA而不是原生的Pod安全策略?
- 浅入浅出 Java ConcurrentHashMap