Python实现手绘图效果实例分享

首先我们来看看原图:

接着我们来看看效果图:

通过分析我们不难发现以下特征:

  • 主要颜色为黑白灰
  • 边界线条较重
  • 相同或相近色趋于白色
  • 略有光源效果

需要用到的库有:

  • numpy
  • PIL

代码实现:

import numpy as np
from PIL import Image

baseImg = Image.open("./img/myimg2.jpg").convert("L")  # 这里放置你要手绘的图片原图
a = np.array(baseImg).astype("float")

depth = 8.
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.sin(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)                      # 限制

img = Image.fromarray(b.astype("uint8")) # 重构图像
img.save("./toImg/myImage1.jpg")         # 保存图像

实例扩展:

from PIL import Image
import numpy as np

#为了便于文件的导入,可以使用相对路径,将文件和程序放在同一个文件夹下

vec_el=np.pi/2.2
vec_az=np.pi/4.
depth=10.
im=Image.open("HIT2.jpg").convert('L')
a=np.asarray(im).astype('float')
grad=np.gradient(a)
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
a2=255*(dx*uni_x+dy*uni_y+dz*uni_z)
a2=a2.clip(0,255)
im2=Image.fromarray(a2.astype('uint8'))
im2.save('hit2-SH.jpg')

到此这篇关于Python实现手绘图效果实例分享的文章就介绍到这了,更多相关Python实现手绘图效果内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python手绘可视化工具cutecharts使用实例

    这篇文章主要介绍了Python手绘可视化工具cutecharts使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,给大家介绍一个很酷的 Python 手绘风格可视化神包:cutecharts. 和 Matplotlib .pyecharts 等常见的图表不同,使用这个包可以生成下面这种看起来像手绘的各种图表,在一些场景下使用效果可能会更好. GitHub 地址:https://github.com/chenjiandongx/cut

  • Python实现手绘图效果实例分享

    首先我们来看看原图: 接着我们来看看效果图: 通过分析我们不难发现以下特征: 主要颜色为黑白灰 边界线条较重 相同或相近色趋于白色 略有光源效果 需要用到的库有: numpy PIL 代码实现: import numpy as np from PIL import Image baseImg = Image.open("./img/myimg2.jpg").convert("L")  # 这里放置你要手绘的图片原图 a = np.array(baseImg).ast

  • python获取代理IP的实例分享

    平时当我们需要爬取一些我们需要的数据时,总是有些网站禁止同一IP重复访问,这时候我们就应该使用代理IP,每次访问前伪装自己,让"敌人"无法察觉. oooooooooooooooOK,让我们愉快的开始吧! 这个是获取代理ip的文件,我将它们模块化,分为三个函数 注:文中会有些英文注释,是为了写代码方便,毕竟英文一两个单词就ok了 #!/usr/bin/python #-*- coding:utf-8 -*- """ author:dasuda "&

  • python判断是空的实例分享

    在实际的工作当中,我们难免要与空值打交道,相信不少初学者都会写出下面的代码: if a is None:     do something.else:     do the other thing. 这样写看起来不错,但实际上会有问题.一般来讲,Python中会把下面几种情况当做空值来处理: None False 0,0.0,0L '',(),[],{} 其中None的特殊之处在于,它既不是数值0,也不是某个数据结构的空值,它本身就是一个空值对象.它的类型是NoneType,它遵循单 例模式,也

  • python输出国际象棋棋盘的实例分享

    国际象棋是当今国际上最流行的智力体育运动项目.青年人下棋可以锻炼思维.增强记忆力和培养坚强的意志:中年人下棋可以享受美学:老年下棋可以很好的休息娱乐.国际象棋游戏有自己的规则,需要两个人将棋子落在棋盘上. 棋子落在棋盘上事件,在计算机看来,是一段程序,而这些程序又由一系列的指令组成.关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,今天,我们就在计算机上用python开启一段输出国际象棋棋盘的编程之旅. 程序分析:用i控制行,j来控制列,根据i+j的

  • 用python实现词云效果实例介绍

    目录 什么是词云 一.特效预览 二.程序原理 三.程序源码 总结 什么是词云 词云其实就是就是对网络文本中出现频率较高的〝关键词〞予以视觉上的突出,形成〝关键词云层〞或〝关键词渲染〞从而过滤掉大量的文本信息 词云也是数据可视化的一种形式.给出一段文本,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白其文章主旨. 一.特效预览 词云图 二.程序原理 从给出的文本中,进行分词处理,然后将每个词出现的的频率进行统计从给出的背景图片上,读出图片信息将文本按照出现的频率进行画图,出现频率越高

  • Python贪吃蛇小游戏实例分享

    本文实例为大家分享了Python实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 使用的库 pygame .random .pyautogui 流程简述 1.设置初始参数 设置每个网格大小为 20 px ,size可以随意修改但最好为20的倍数,设置初始方向向右,初始蛇长为 3 . # 初始化参数 size = 320 screen = pygame.display.set_mode([size,size],0 , 32) pygame.display.set_caption("贪吃蛇&qu

  • python实现雪花飘落效果实例讲解

    在学习pygame模块过程中,我们可以通过使用 pygame模块实现很多功能性的东西,但是很多人应该没有利用pygame实现过雪花飘落的效果吧,有时候可能是不知道从何入手或者是没有时间写,接下来我就教大家如何利用pygame模块实现雪花飘落的效果吧,总共都用不到40行代码就可以实现哦,希望对你们有所帮助 第一步:我们先打开我们的pycharm软件,然后新建一个Python文件 第二步:建立好文件之后,我们在编辑页面输入以下代码: import pygame import sys #导入模块 im

  • wxPython:python首选的GUI库实例分享

    wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能健全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的. 就如同Python和wxWidgets一样,wxPython也是一款开源软件,并且具有非常优秀的跨平台能力,能够支持运行在32 [1] /64位windows.绝大多数的Unix或类Unix系统.Macintosh OS X下. wxPython是Py

  • js 轮播效果实例分享

    html <!--图片轮播 Start--> <div class="pics-ul"> <div class="pics-ulleft"> <ul id="allImg"> <li><img src="img/img01.png"/></li> <li><img src="img/img2.jpg"/&g

  • Python+PyQT5实现手绘图片生成器

    手绘图片生成器可以将导入的彩色图片通过python分析光源.灰度等操作生成手绘图片. UI界面的整体部分代码块,UI界面的设计比较简单.效果在上面的图片展示. class HandImage(QWidget): def __init__(self): super(HandImage, self).__init__() self.init_ui() def init_ui(self): ''' UI界面组件及布局 :return: ''' self.setWindowTitle('手绘图片生成器

随机推荐