Python——彩图变线稿

摘要:
每个像素由8位表示,0表示黑色,255表示白色。换算公式:L=R*299/1000+G*587/1000+B*114/1000。

思路:

1、用灰度变化来模拟视觉的明暗程度;

2、把彩图转为灰度数组;

3、求出梯度数组,即灰度变化率数组;

4、预设灰度值10,范围0-100,衰减到10%,这将对灰度变化率按作衰减;

5、令z变化率为1,对x、y、z的作归一化处理;

6、定义一个光源,附视角接近90度,方位角45度;

7、令对角线长度为单位1,分别计算光源在x、y、z轴的投影值;

8、将归一化并衰减过的灰度变化率,分别乘以对应的投影值,之后相加;

9、得到灰度系数,再乘以255,即线稿的灰度值;

10、输出线稿图;

代码如下:

#coding=utf-8

from PIL import Image 
import numpy as np

orgimg = '/Users/chong/Documents/code/ai/gray/t1/res/card_100023.png'
outimg = '/Users/chong/Documents/code/ai/gray/t1/res/card_100023_gray.png'
a = np.asarray(Image.open(orgimg).convert('L')).astype('float')

# 根据灰度变化来模拟人类视觉的明暗程度
depth = 10.             # 预设虚拟深度值为10 范围为0-100 
grad = np.gradient(a)   # 提取梯度值
grad_x, grad_y = grad   # 提取x y方向梯度值 解构赋给grad_x, grad_y

# 利用像素之间的梯度值和虚拟深度值对图像进行重构
grad_x = grad_x * depth / 100.
grad_y = grad_y * depth / 100. #根据深度调整x y方向梯度值

# 梯度归一化 定义z深度为1.  将三个梯度绝对值转化为相对值,在三维中是相对于斜对角线A的值
A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.)
uni_x = grad_x / A 
uni_y = grad_y / A 
uni_z = 1./ A

# 令三维中是相对于斜对角线的值为1
vec_el = np.pi / 2.1                    # 光源俯视角度   弧度值  接近90度
vec_az = np.pi / 4.                     # 光源方位角度   弧度值  45度
dx = np.cos(vec_el) * np.cos(vec_az)    # 光源对x轴的影响 对角线在x轴投影
dy = np.cos(vec_el) * np.sin(vec_az)    # 光源对y轴的影响 对角线在y轴投影
dz = np.sin(vec_el)                     # 光源对z轴的影响 对角线在z轴投影

b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z) # 光源归一化
b = b.clip(0, 255)                               # 为了避免数据越界,生成灰度值限制在0-255区间
im = Image.fromarray(b.astype( 'uint8'))         # 图像更构 
im.save(outimg)       # 保存图片

运行   python pic-gray.py 

效果图

Python——彩图变线稿第1张  Python——彩图变线稿第2张

相关库安装  pip install numpy

取灰度图方法

1. img = img.convert()
  PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。

1.1 img.convert('1')
  为二值图像,非黑即白。每个像素用8个bit表示,0表示黑,255表示白。

1.2 img.convert('L')
  为灰度图像,每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

   转换公式:L = R * 299/1000 + G * 587/1000+ B * 114/1000。

1.3 img.convert('P')

 ps:

显示图片

import matplotlib.pyplot as plt
plt.figure("preview")
plt.imshow(Image.open(outimg))
plt.show()

免责声明:文章转载自《Python——彩图变线稿》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# WebApi 接口传参详解调试lua代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

深度学习——卷积神经网络入门

传统神经网络:   是全连接形式,即样本的每个特征属性都通过所有的隐藏层节点映射,最后输出数据。由于是全连接,所以计算极为复杂,且模型不易学习。 卷积神经网络:卷积神经网络(Convolutional Neural Networks, CNN), CNN可以有效的降低反馈神经网络(传统神经网络)的复杂性,常见的CNN结构有LeNet-5、AlexNet、Z...

CS231N 数据预处理(data proprecessing)

原文链接:https://blog.csdn.net/weixin_38646522/article/details/79534677 一些数据预处理的标准方法有均值化数据和归一化数据。 零中心化的意义在上面已经详细的讲述了,这里就不在细讲。 归一化数据的意义在于让所有的特征都在相同的值域之内,并且让这些特征有相同的贡献。对于图像处理,在大部分情况下会进...

《特征工程三部曲》之一:数据处理

要理解特征工程,首先要理解数据(Data)和特征(Feature)的概念 概念 特征工程(Feature Engineering) 其本质上是一项工程活动,它目的是最大限度地从原始数据中提取特征以供算法和模型使用。 特征工程在数据挖掘中有举足轻重的位置 数据领域一致认为:数据和特征决定了机器学习的上限,而模型和算法只能逼近这个上限而已。 特征工程...

目标检测的图像特征提取之(一)HOG特征

1、HOG特征:        方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。需要提醒的是,HOG+SVM进...

计算流体模拟理论2

二维的NS-方程:   这个方程一定要拆分成部分才能解出来。 这里面我感觉只要把泊松方程解法搞定,基本快出山写最简单的 "计算流体" 完全没问题 以下是做了个初始的source field,用python numpy 先快速撸了一遍算法。 并且重新实现3d版本在Houdini中,houdini有更好的可视化. velocity advection 是RK...