(1)彩照转黑白# -*- coding: utf-8 -*-

"""

Created on Thu Mar 21 03:45:16 2019

@author: czh

"""

%clear

%reset -f

# In[*]

from PIL import Image

import numpy as np

import os

os.chdir('D:\\train\\cv')

# In[*]

from PIL import Image

import numpy as np

a = np.asarray(Image.open("AWM.jpg").convert('L'))#.convert是变成黑白的

grad = np.gradient(a)

grad

grad_x, grad_y = grad

# In[*]

b=255-a#在对应的颜色通道减去他自己变成黑白底片的效果

im=Image.fromarray(b.astype('uint8'))

im

# In[*]

c=(100/255)*a+150#区间变换,颜色比较淡的灰度的图片

im=Image.fromarray(c.astype('uint8'))

im

# In[*]

d=255*(a/255)**2#像素平方,颜色比较深的图

im=Image.fromarray(d.astype('uint8'))

im

image.png

image.png

image.png

(2)图片转素描画

通过Numpy中的asarray函数将图片的灰度值以浮点型矩阵的形式存储起来,再用gradient函数得出图片灰度值的梯度# -*- coding: utf-8 -*-

"""

Created on Thu Mar 21 03:45:16 2019

@author: czh

"""

%clear

%reset -f

# In[*]

from PIL import Image

import numpy as np

import os

os.chdir('D:\\train\\cv')

# In[*]

from PIL import Image

import numpy as np

a = np.asarray(Image.open("StarryNight.jpg").convert('L'))#.convert是变成黑白的

grad = np.gradient(a)

grad

Out[37]:

[array([[225. , 233. , 252. , ..., 18. , 19. , 2. ],

[ 0.5, 127. , 3.5, ..., 5. , 18. , 17. ],

[ 19.5, 10. , 126.5, ..., 103.5, 5.5, 29. ],

...,

[ 0. , 0.5, 1. , ..., 126.5, 126.5, 126.5],

[ 4. , 4.5, 5. , ..., 7. , 7. , 7. ],

[ 9. , 10. , 9. , ..., 13. , 13. , 13. ]]),

array([[239. , 0. , 21. , ..., 113.5, 115.5, 243. ],

[247. , 13.5, 29. , ..., 25.5, 107.5, 226. ],

[236. , 3. , 17. , ..., 62.5, 127.5, 241. ],

...,

[242. , 116.5, 126. , ..., 4. , 5. , 5. ],

[242. , 117.5, 127. , ..., 3. , 5. , 5. ],

[243. , 117.5, 127. , ..., 5. , 5. , 5. ]])]

我们来观察一下L矩阵,可以看出a是一个二维浮点型矩阵,因此它的梯度grad里应该有两个数组矩阵,分别对应两层维度的梯度。现取最外层维度梯度为x方向的梯度值grad_x,取第二层维度梯度值为y方向梯度值grad_ygrad_x, grad_y = grad

这时我们已经取得了图像的梯度值,就可以通过改变像素的梯度值来改变图像的灰度变化,对图像进行重构了。我们先设一个深度值depth,取值范围为(0,100),然后利用深度调整x和y方向的梯度值。

我们使grad_x = grad_x*depth/100.

grad_y = grad_y*depth/100.

深度值越小,重构后的图像梯度值越小,即图像灰度值变化越小,画面线条越少,整体更显洁净。

比如当depth=1时:

反之,深度值越大,重构后的图像梯度值越大,即图像灰度值变化越大,画面线条越多,整体更显肮脏。比如当depth=100时

image.png

因此我们需要通过改变depth,找到最符合人类视觉远近程度的深度值。经过多次测试发现,当深度值为10左右时,即图像灰度梯度变为原来的10%左右时,画面最接近手绘化效果。(当然,对于不同的图片,这个最佳深度值不一定相同)。在本文中我们取depth=10

制造光源效果

类似版画的效果,这是因为此时的图像还没有光源效果,跟我们实际观察事物的感觉不一样,因此我们还需要为图像制造光源效果。如图,我们先假设一个光源位于图像斜上方,设俯视角为el,方位角为az,则单位光线在x,y,z方向上的投影长度分别为:通过多次调整发现,当俯视角el=π/2.2, 方位角az=π/4时光照效果最好。(当然对于不同图像两个角度的选取不一定相同)

实现代码为:depth = 10 # (0-100)

grad = np.gradient(a) #取图像灰度的梯度值

grad_x, grad_y =grad #分别取横纵图像梯度值

grad_x = grad_x*depth/100.

grad_y = grad_y*depth/100.

A = np.sqrt(grad_x**2 + grad_y**2 + 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) #光源对x 轴的影响

dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响

dz = np.sin(vec_el) #光源对z 轴的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化

我们将这个过程叫做光源的归一化

重构图像

由于灰度值的选取范围为(0,255),为了避免数据越界,需要将生成的灰度值裁剪至0-255之间b = b.clip(0,255)

由新的灰度值重构图像im = Image.fromarray(gd.astype('uint8'))

其中uint8是一种数据类型。这时图像的手绘化效果已经完成了# -*- coding: utf-8 -*-

"""

Created on Thu Mar 21 03:45:16 2019

@author: czh

"""

%clear

%reset -f

# In[*]

from PIL import Image

import numpy as np

import os

os.chdir('D:\\train\\cv')

# In[*]

from PIL import Image

import numpy as np

a = np.asarray(Image.open("AWM.jpg").convert('L'))#.convert是变成黑白的

grad = np.gradient(a)

grad

grad_x, grad_y = grad

# In[*]

b=255-a#在对应的颜色通道减去他自己变成黑白底片的效果

im=Image.fromarray(b.astype('uint8'))

im

# In[*]

c=(100/255)*a+150#区间变换,颜色比较淡的灰度的图片

im=Image.fromarray(c.astype('uint8'))

im

# In[*]

d=255*(a/255)**2#像素平方,颜色比较深的图

im=Image.fromarray(d.astype('uint8'))

im

# In[*]

a = np.asarray(Image.open("AWM.jpg").convert('L')).astype('float')

# In[*]

depth = 10 # (0-100)

grad = np.gradient(a) #取图像灰度的梯度值

grad_x, grad_y =grad #分别取横纵图像梯度值

grad_x = grad_x*depth/100.

grad_y = grad_y*depth/100.

A = np.sqrt(grad_x**2 + grad_y**2 + 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) #光源对x 轴的影响

dy = np.cos(vec_el)*np.sin(vec_az) #光源对y 轴的影响

dz = np.sin(vec_el) #光源对z 轴的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化

b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8')) #重构图像

im

# In[*]

im.save("手绘.jpg")

python画黑白线条_python实现彩照转黑白以及图片转素描画相关推荐

  1. python——画蛇形线条

    用python画蛇形线条 代码: turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() tu ...

  2. python把图片转化为素描画_python如何将图片转换素描画 python将图片转换素描画代码示例...

    python如何将图片转换素描画?本篇文章小编给大家分享一下python将图片转换素描画代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如 ...

  3. python图片转黑白_python实现彩照转黑白以及图片转素描画

    (1)彩照转黑白 # -*- coding: utf-8 -*- """ Created on Thu Mar 21 03:45:16 2019 @author: czh ...

  4. python素描画_python实现彩照转黑白以及图片转素描画

    (1)彩照转黑白 # -*- coding: utf-8 -*- """ Created on Thu Mar 21 03:45:16 2019 @author: czh ...

  5. 怎么用python画个电脑_python语言还是java如何用python画爱心

    用python绘制爱心的基本步骤如下: 002pc.com对<python语言还是java如何用python画爱心>总结来说,为我们学习Python很实用. 首先先下载安装好python程 ...

  6. 用python画一个笑脸_python画个笑脸

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! project python是一本免费的交互式书籍,它通过使用图形.动画和游戏来 ...

  7. python画xy轴_python画双y轴图像的示例代码

    很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像. 一个例子: import ...

  8. python画樱花树教程_Python画樱花树❀

    这篇文章参考了别人的博客<Python:绘制樱花树> 原文作者:Ambitioner_c.他又参考了作者:沙漏在下雨 哈哈-- 一.代码详解 (一)绘制画幕 首先绘制画幕,命令说明如下: ...

  9. python画pr曲线_python 画函数曲线示例

    python 画函数曲线示例 如下所示: import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 2 * np.pi ...

最新文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(九) Policy Injection Application Block
  2. python搭建环境是什么_python虚拟环境是什么?python虚拟环境的介绍
  3. oracle 邻接模型,【原创】MySQL 模拟Oracle邻接模型树形处理
  4. mediawiki 编辑php代码,mediawiki_1.25配置wikieditor编辑器
  5. 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写
  6. SQL Server的锁机制
  7. 【华为设备开启TELNET】
  8. 三星android se干啥得,万元安卓机用了3个月,换成三千元的iPhoneSE后,谈谈真实感受...
  9. matlab箭头梯度方向场,局部路径规划算法——人工势场法
  10. 获取当天开始时间以及结束时间
  11. 热搜第一!中国烟草总公司工资曝光,员工人均年收入超18万元!网友:简直是不锈钢饭碗!...
  12. SpringCloud——网关2
  13. JAVA启动杀怒尖塔_杀戮尖塔如何修改class 杀戮尖塔修改class文件方法步骤图解
  14. JAVA之HttpClient+Jsoup实现代理IP爬虫
  15. 一个小时学会Maven(参考资料)
  16. 求50以内的全部素数
  17. 解决maven打jar包时不把依赖打包进去的问题
  18. 世界上最美丽的英文情话
  19. Creating a ContextMenu in ListView
  20. MBR分区表格式 - 简明概述

热门文章

  1. 用英语编辑计算机学习对话60字,自我介绍用英语写作文60字
  2. python画等高线和生成网格点【转载】
  3. Java、对二维数组排序
  4. 网页禁用F5、ctrl+R以及右键刷新
  5. python数组独立复制
  6. 光伏用塑壳断路器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. 如何将pdf压缩到1m以下或以内?怎么把pdf压缩到2m以下或以内?
  8. 计算机专业内存8g和16g差距大吗,电脑内存8g和16g的区别大吗?
  9. 访问cache效率、平均访问时间的计算公式
  10. sql语句插入百万测试数据