用Python实现手绘图像的效果

1.图像的RGB色彩模式

  图像一般使用RGB色彩模式,即每个像素点的颜色由红®、绿(G)、蓝(B)组成。RGB三个颜色通道的变化和叠加得到各种颜色,其中:

  • R红色,取值范围,0-255
  • G绿色,取值范围,0-255
  • B蓝色,取值范围,0-255

RGB形成的颜色包括了人类视力所感知的所有颜色。

2.图像的数组表示

图像是 一个由像素组成的二维矩阵,每个元素是一个RGB值:

3.图像的数组表示

图像是一个三维数组,维度分别是高度、宽度和像素RGB值

import numpy as np
from PIL import Imageif __name__ == '__main__':im = np.asarray(Image.open('./beijing.jpg'))print(im.shape,im.dtype)
(669, 1012, 3) uint8

4.图像的变换

  读入图像后,获得图像RGB值,修改后保存为新的文件:
对像素值取反:

import numpy as np
from PIL import Imageif __name__ == '__main__':a = np.asarray(Image.open('./beijing.jpg'))print(a.shape,a.dtype)b=[255,255,255]-aim=Image.fromarray(b.astype('uint8'))im.save('./pic/beijing2.jpg')

  读入图像后,获得图像RGB值,转换为灰度图,修改后保存为新的文件:
对像素值取反:

import numpy as np
from PIL import Imageif __name__ == '__main__':a = np.asarray(Image.open('./beijing.jpg').convert('L'))print(a.shape,a.dtype)b=255-aim=Image.fromarray(b.astype('uint8'))im.save('./pic/beijing3.jpg')


  读入图像后,获得图像RGB值,转换为灰度图,修改后保存为新的文件:
对像素做区间变换:

  读入图像后,获得图像RGB值,转换为灰度图,修改后保存为新的文件:
对像素做平方运算:

import numpy as np
from PIL import Imageif __name__ == '__main__':a = np.asarray(Image.open('./beijing.jpg').convert('L'))print(a.shape, a.dtype)b = 255*(a/255)**2im = Image.fromarray(b.astype('uint8'))im.save('./pic/beijing6.jpg')

5.图像手绘效果

手绘效果的几个特征:

  • 黑白灰色
  • 边界线 较重
  • 相同或相近色彩趋于白色
  • 略有光源效果
    利用像素之间的梯度值和虚拟深度值对图像进行重构,根据灰度变换来模拟人类视觉的远近程度。
 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.

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

  • 设计一个位于图像斜上方的虚拟光源
  • 光源相对于图像的俯视角为Elevation,方位角Azimuth
  • 建立光源对个点梯度值的影响函数
  • 运算出各点的新像素值
    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 轴的影响

梯度归一化:

    A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)#构造x和y轴梯度的三维归一化单位坐标系uni_x = grad_x / Auni_y = grad_y / Auni_z = 1. / Ab = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化,光源与梯度相互作用,将梯度转化为灰度

图像生成:

    b = b.clip(0, 255)#为避免数据越界,将生成的灰度值剪裁至0-255im = Image.fromarray(b.astype('uint8'))  # 重构图像im.save('./beijingHD.jpg')

完整代码:

import numpy as np
from PIL import Image# CSV: Comma-Seperate Values
if __name__ == '__main__':a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')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.)#构造x和y轴梯度的三维归一化单位坐标系uni_x = grad_x / Auni_y = grad_y / Auni_z = 1. / Avec_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)#为避免数据越界,将生成的灰度值剪裁至0-255im = Image.fromarray(b.astype('uint8'))  # 重构图像im.save('./beijingHD.jpg')

最终效果

Python实现图像的手绘效果相关推荐

  1. python数据分析与展示--图像的手绘效果

    目录 一.图像的数组表示 1.图像的RGB色彩模式 2.PIL库 二.图像变换 1.image转换成array 2.array转换成image 三.图像的手绘效果 1.实例介绍  ​ 2.编程实例 一 ...

  2. 利用Numpy+PIL读取图像实现手绘效果

    读取图像+简单处理 import numpy as np from PIL import Imagepath = "" #图像路径im = np.array(Image.open( ...

  3. Python 神仙姐姐图像手绘效果实现

    文章目录 一.图像的 RGB 色彩模式 二.Python的 PIL 库 三.图像的数组表示 四.图像的变换 五.图像的手绘效果实现 一.图像的 RGB 色彩模式 图像一般使用 RGB 色彩模式,即每个 ...

  4. Python 数据分析与展示笔记2 -- 图像手绘效果

    Python 数据分析与展示笔记2 – 图像手绘效果 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考文档: ...

  5. Python -- 图像的手绘风格

    ** Python – 图像的手绘风格 ** 今天在mooc上了解到python可以做出手绘风格的图片,感觉很惊奇,很想知道python对于图片是如何处理的,因此上网搜了一些博主的文章,总结了一下. ...

  6. Python实现图片手绘效果

    Python实现图片手绘效果 在图像处理领域中,手绘效果是一个非常有趣的特效.在这篇文章中,我们将讨论如何使用Python和PIL库来实现图片的手绘效果. 准备工作 在开始之前,我们需要安装PIL库. ...

  7. Three.js铅笔手绘效果实现

    在这个教程中,我们将学习如何使用 Three.js 后处理创建铅笔手绘效果. 我们将完成创建自定义后处理渲染通道.在 WebGL 中实现边缘检测.将法线缓冲区重新渲染到渲染目标以及使用生成和导入的纹理 ...

  8. PS效果教程——冒充手绘效果

    PS效果教程--冒充手绘效果 先来发个原图和效果图: 图1 图2 开始拉! 1.先将原图复制一份 2.选择滤镜--风格化--查找边缘 图3 #p#副标题#e# 3.再选择滤镜--艺术效果--粗糙蜡笔, ...

  9. [原创] 人物仿手绘效果--美女篇(超详细哦)

    [转自]http://68ps.5d6d.com/thread-11541-1-4.html 大家好!第一次写教程,写的不好,但还是希望大家能够给我点鼓励! 虽然效果处理的不尽人意,然而,我还是厚着脸 ...

最新文章

  1. python 参数
  2. shell实例第21讲:定时清空文件内容,定时记录文件大小
  3. java的语法知识_Java语法知识点
  4. linux kafka离线安装,centos 离线安装confluent_kafka 模块
  5. 邮件发送---在.net2003和2005中
  6. 使用vue-CLI构建vue工程项目
  7. 测试python第二周_python第二周作业
  8. 成员函数指针与高性能的C++委托(下篇)
  9. 20分钟理解React Native For Android原理
  10. PlaceholderTextView
  11. dedecms联动筛选_织梦dedecms图片联动筛选教程
  12. MFC 进行界面设计与编程
  13. 智慧社区智能化管理系统搭建
  14. 51单片机基础入门教程(精华版)文末有惊喜
  15. Web基础配置篇(八): 远程操作工具、命令的介绍、安装及基本使用
  16. 咬了一口苹果死去的计算机之父——图灵
  17. [C#] [GIS] 关于椭球七参数和高斯投影正反算的一些总结
  18. 7z文件格式及其源码的分析(三)
  19. Zabbix 监控 Windows主机
  20. python jQuery

热门文章

  1. AcWing每日一题2041. 干草堆
  2. ping 简单的测试 延时、抖动、丢包率
  3. 一个完善的ActiveX Web控件教程
  4. 锂离子电池HPPC测量
  5. 国外著名大学网络课堂
  6. java web简单的网上名片管理系统
  7. Kubernetes 部署高可用集群(二进制,v1.18)下
  8. usaco#2018#January#Silver
  9. 干货 | SQL 进阶技巧
  10. 房屋中介信息管理系统