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——图像手绘效果的更多相关文章

  1. 使用numpy和PIL实现图像的手绘效果

    输入 输出 代码如下 图像的手绘效果的实现 from PIL import Image import numpy as np a = np.array(Image.open("index.j ...

  2. 永中dcs实现浏览器上面的手绘效果

    永中dcs是一款在线预览各种办公文件的网络产品,我们可以只用一个浏览器就可以实现对word,ppt和excel等文件的在线浏览,在其中有一个在线手绘功能很有特色,让我们来探一探它的实现原理吧. 第一, ...

  3. 图像的手绘效果(Python)

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

  4. python之实现图像的手绘效果

    https://blog.csdn.net/riba2534/article/details/74152285 原图: b: c: d: 最终图:

  5. Android手绘效果实现

    效果图 原理 大概介绍一下实现原理.首先你得有一张图(废话~),接下来就是把这张图的轮廓提取出来,轮廓提取算法有很多,本人不是搞图像处理的,对图像处理感兴趣的童鞋可以查看相关资料.如果你有好的轮廓提取 ...

  6. 图像滤镜艺术---PS图像转手绘特效实现方案

    原文:图像滤镜艺术---PS图像转手绘特效实现方案 手绘效果实现方案 本文介绍一种PS手绘效果的实现方案,PS步骤来自网络,本文介绍代码实现过程. 整体看来,虽然效果还是有很大差异,但是已经有了这种特 ...

  7. Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用

    概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...

  8. Python绘图还在用Matplotlib?out了 !发现一款手绘可视化神器!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. GitHub 地址:https://github.com/chenjian ...

  9. 发现一款手绘可视化神器!Python绘图还在用Matplotlib?out了 !

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取htt ...

随机推荐

  1. 三个值得期待的JavaScript新功能!

    让我们来看看JavaScript中一些有用的即将推出的功能.您将看到他们的语法,链接以及时了解他们的进度,我们将编写一个小型测试套件,以展示如何立即开始使用这些提案! JavaScript是如何更新迭 ...

  2. bp(net core)+easyui+efcore实现仓储管理系统——入库管理之三存储过程(三十九)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  3. Python——工厂模式

    目录 前言 一.简单工厂 二.工厂方法 抽象工厂 结论 参考 前言 工厂模式,顾名思义就是我们可以通过一个指定的"工厂"获得需要的"产品". 在设计模式中主要用 ...

  4. 2020ubuntu1804server编译安装redis5笔记(二)配置redis

    前一篇笔记记录了ubuntu1804server编译安装redis5,接下来要配置redis5了 网址:https://www.cnblogs.com/qumogu/p/12435694.html 第 ...

  5. scrapycrawl 爬取笔趣阁小说

    前言 第一次发到博客上..不太会排版见谅 最近在看一些爬虫教学的视频,有感而发,大学的时候看盗版小说网站觉得很能赚钱,心想自己也要搞个,正好想爬点小说能不能试试做个网站(网站搭建啥的都不会...) 站 ...

  6. ajax3

    json json:JavaScript对象表示方法(JavaScript object notation) json:是存储和交换文本信息的语法,类似与xml.他使用键值对的方式来组织,易于人们阅读 ...

  7. 机器学习实战 [Machine learning in action]

    内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属 ...

  8. Druid连接池和springJDbc框架-Java(新手)

    Druid连接池: Druid 由阿里提供 安装步骤: 导包 durid1.0.9 jar包 定义配置文件 properties文件 名字任意位置也任意 加载文件 获得数据库连接池对象 通过Durid ...

  9. Natas1 Writeup(查看页面源码)

    Natas2: 提示密码就在本页,但右键被禁用,可以使用F12或者抓包查看元素得到flag. flag:ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi 常用的查看源码方法:右键查看. ...

  10. 搭建XSS测试平台

    XSS测试平台是测试XSS漏洞获取cookie并接收web页面的平台,XSS可以做js能做的所有事情,包括但不限于窃取cookie,后台增删文章.钓鱼.利用xss漏洞进行传播.修改网页代码.网站重定向 ...