Python——图像手绘效果
1、图像的RGB色彩模式

PIL
PIL, Python Image Library
PIL库是一个具有强大图像处理能力的第三方库
在命令行下的安装方法: pip install pillow
from PIL import Image
Image是PIL库中代表一个图像的类(对象)


from PIL import Image import numpy as np im=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg")) print(im.shape,im.dtype)



可以看出图像是一个三维数组,800行,1200列,每一个点分别是RGB三个值。
2、图像的变换
(1)
b=[255,255,255]-im
a=Image.fromarray(b.astype('uint8'))%生成新的图像三维数组
a.save(r"C:\Users\Administrator\Desktop\timg_2.jpg")

(2)
模式L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
L = R * 299/1000 + G * 587/1000+ B * 114/1000
下面我们将图像转换为“L”图像。
a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg"))
b=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))
c=Image.fromarray(b.astype('uint8'))
c.save(r"C:\Users\Administrator\Desktop\timg_5.jpg")

RGB三个数变为了一个数。
(3)
a=np.array(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L'))%变为灰度值图片
a
Out[12]:
array([[104, 104, 104, ..., 145, 145, 145],
[104, 104, 104, ..., 145, 145, 145],
[104, 104, 104, ..., 145, 145, 145],
...,
[ 70, 78, 79, ..., 73, 65, 78],
[ 72, 79, 78, ..., 76, 49, 83],
[ 73, 71, 69, ..., 118, 76, 97]], dtype=uint8)
b=255-a
b
Out[14]:
array([[151, 151, 151, ..., 110, 110, 110],
[151, 151, 151, ..., 110, 110, 110],
[151, 151, 151, ..., 110, 110, 110],
...,
[185, 177, 176, ..., 182, 190, 177],
[183, 176, 177, ..., 179, 206, 172],
[182, 184, 186, ..., 137, 179, 158]], dtype=uint8)
im=Image.fromarray(b.astype('uint8'))
im.save(r"C:\Users\Administrator\Desktop\timg_3.jpg")

(4)
d=255*(a/255)**2 %平方变换
im=Image.fromarray(d.astype('uint8'))
im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")

(5)
d=(100/255)*a+150%区间变换
im=Image.fromarray(d.astype('uint8'))
im.save(r"C:\Users\Administrator\Desktop\timg_4.jpg")

2、图像手绘效果分析
手绘效果的几个特征:
• 黑白灰色
• 边界线条较重
• 相同或相近色彩趋于白色
• 略有光源效果
(1)梯度重构
利用像素之间的梯度值和虚拟深度值对图像进行重构

(2)光源效果
根据灰度变化来模拟人类视觉的远近程度


(3)

(4)

from PIL import Image
import numpy as np a = np.asarray(Image.open(r"C:\Users\Administrator\Desktop\timg.jpg").convert('L')).astype('float') depth = 10.
grad = np.gradient(a) #梯度值,
grad_x, grad_y = grad
grad_x = grad_x*depth/100. #列梯度值*0.1
grad_y = grad_y*depth/100. A = np.sqrt(grad_x**2 + grad_y**2 + 1.) #相当于grad_z=1
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A #梯度归一化 vec_el = np.pi/2.2
vec_az = np.pi/4. dx = np.cos(vec_el)*np.cos(vec_az)
dy = np.cos(vec_el)*np.sin(vec_az)
dz = np.sin(vec_el) #长度为1,投影x,y,z长度 b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)
b = b.clip(0,255) im = Image.fromarray(b.astype('uint8'))
im.save(r"C:\Users\Administrator\Desktop\timg_6.jpg")

数据变化过程如下








目的其实是将数据两级化,要么黑要么白,更好凸显手绘的感觉
x,y梯度变化越大,,则z的梯度比例越小,此时求出的变化后的灰度值越小,颜色越黑。
相反,则灰度值越大,越白,将黑白分明就显示出来了。
Python——图像手绘效果的更多相关文章
- 使用numpy和PIL实现图像的手绘效果
输入 输出 代码如下 图像的手绘效果的实现 from PIL import Image import numpy as np a = np.array(Image.open("index.j ...
- 永中dcs实现浏览器上面的手绘效果
永中dcs是一款在线预览各种办公文件的网络产品,我们可以只用一个浏览器就可以实现对word,ppt和excel等文件的在线浏览,在其中有一个在线手绘功能很有特色,让我们来探一探它的实现原理吧. 第一, ...
- 图像的手绘效果(Python)
PIL库,Python Image Library PIL库是一个具有强大图像处理能力的第三方库 在命令行下的安装方法:pip install pillow from PIL import Image ...
- python之实现图像的手绘效果
https://blog.csdn.net/riba2534/article/details/74152285 原图: b: c: d: 最终图:
- Android手绘效果实现
效果图 原理 大概介绍一下实现原理.首先你得有一张图(废话~),接下来就是把这张图的轮廓提取出来,轮廓提取算法有很多,本人不是搞图像处理的,对图像处理感兴趣的童鞋可以查看相关资料.如果你有好的轮廓提取 ...
- 图像滤镜艺术---PS图像转手绘特效实现方案
原文:图像滤镜艺术---PS图像转手绘特效实现方案 手绘效果实现方案 本文介绍一种PS手绘效果的实现方案,PS步骤来自网络,本文介绍代码实现过程. 整体看来,虽然效果还是有很大差异,但是已经有了这种特 ...
- Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用
概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...
- Python绘图还在用Matplotlib?out了 !发现一款手绘可视化神器!
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. GitHub 地址:https://github.com/chenjian ...
- 发现一款手绘可视化神器!Python绘图还在用Matplotlib?out了 !
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...
随机推荐
- react-native 使用leanclound消息推送
iOS消息推送的基本流程 1.注册:为应用程序申请消息推送服务.此时你的设备会向APNs服务器发送注册请求.2. APNs服务器接受请求,并将deviceToken返给你设备上的应用程序 3.客户端应 ...
- 关于Sprites的一些理解
今天做测试,遇到一道选择题. 瞬间一脸懵逼,sprites是什么?通过对各选项的分析,大致明白了几点:1.它是css属性.2.它与图片有关.3.它是背景图片.然后就选了一个大概不靠谱的,成功的选错了. ...
- 【Java】机考常用知识
基本操作 数组 声明数组 方法一: int a[] = null; //声明一维数组 //int[] a = null; 也行,个人习惯 a = new int[10];//分配内存给一维数组 方法二 ...
- 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)
这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...
- mysql(8.0连接navicat发生的错误解决方法)
关于mysql(8.0连接navicat发生的错误解决方法)数据库安装图形化界面无法更改加密的方式导致无法连接问题为解决; Alter user 'root'@'localhost' identifi ...
- pyppeteer使用时常见的bug及基本使用(转)
pyppeteer使用时常见的bug及解决办法: https://blog.csdn.net/Mr__lqy/article/details/102626025 pyppeteer的基本使用: htt ...
- 面试官:HashMap死循环形成的原因是什么?
介绍 HashMap实现原理 之前的文章已经分析了HashMap在JDK1.7的实现,这篇文章就只分析HashMap死循环形成的原因 死循环形成是在扩容转移元素的时候发生的 void resize(i ...
- scrapy-redis使用以及剖析(转)
scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重 ...
- ZooKeeper原理解析
目录 ZooKeeper中的各种角色 ZooKeeper与客户端 Zookeeper节点数据操作流程 Paxos 算法概述(ZAB 协议) ZooKeeper 的选主机制 选择机制中的概念 选举消息内 ...
- FastDFS源码学习(一)FastDFS介绍及源码编译安装
FastDFS是淘宝的余庆主导开发的一个分布式文件系统,采用C语言开发,性能较优.在淘宝网.京东商城.支付宝和某些网盘等系统均有使用,使用场景十分广泛. 下图来源:https://blog.csdn. ...