使用PIL库将图片转换为素描

本文介绍了如何使用Python的PIL库将图片转换为手绘素描效果。通过理解图像深度值、图像梯度和灰度等概念,实现对图像的重构,并考虑光源效果模拟视觉远近。提供了两种不同的实现方法,最后展示了代码和效果对比,并分享了GitHub源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来预览一下效果↓ ↓ ↓
这里写图片描述

在写代码前先介绍几个概念,理解了这几个概念才能更好的理解代码

1.图像深度值:

图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率。

2.图像梯度:

梯度的本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
图像梯度可以把图像看成二维离散函数

图像梯度其实就是这个二维离散函数的求导:

G(x,y) = dx(i,j) + dy(i,j);
dx(i,j) = I(i+1,j) - I(i,j);
dy(i,j) = I(i,j+1) - I(i,j);

其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。
图像梯度一般也可以用中值差分:

dx(i,j) = [I(i+1,j) - I(i-1,j)]/2;
dy(i,j) = [I(i,j+1) - I(i,j-1)]/2;

图像边缘一般都是通过对图像进行梯度运算来实现的。

3.灰度:

灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。 每个灰度对象都具有从 0%(白色)到100%(黑色)的亮度值。

图像的手绘效果实现

1、手绘效果的几个特征:

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

2、利用像素之间的梯度值和虚拟深度值对图像进行重构,根据灰度变化来模拟人类视觉的远近程度

3、考虑光源效果,根据灰度变化来模拟人类视觉的远近程度

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

编写代码

代码:

from PIL import Image
import numpy as np

a = np.asarray(Image.open('ha.png').convert(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值