首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Python来将图像进行手绘风格展示

图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成

RGB三个颜色通道的变化和叠加得到各种颜色,其中

R 红色,取值范围,0‐255

G 绿色,取值范围,0‐255

B 蓝色,取值范围,0‐255

RGB形成的颜色(共有256^3种组合)包括了人类视力所能感知的所有颜色。

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

那我们在Python中如何表示图像呢

可以用一个数组来表示图像中的每个元素

图像的数组表示

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

其中第三维度有三个元素(R,G,B)

图像可以表示为数组

那么数组可以进行运算(数组类似于我们代数中学到的矩阵),那就可以将图像进行变换

图像的变换

读入图像,获得像素RGB值

修改后保存为新的文件

IN[29]就是将原来图像的数组a取补码存到数组b中

(也就是将原来图像的像素的RGB值取补值,即最大的值255减去现在的值)

然后将数组b还原为新的图像就得到这样一张图像

我们再做一些变换

为了方便变换,我们先把数组a进行简化

调用convert('L')将一个彩色的图片转换成灰度的图片

存储数组a就从三维数组变成了一个二维数组,数组中的值就代表一个灰度值

我们再对新的数组a进行变换

取补

区间变换

像素平方

仅仅是对图像进行简单的效果变换

这好像有点没趣

那我们来试点不一样的

我们来试试来将图像进行手绘风格的变换

手绘效果图像的特征

• 黑白灰色

• 边界线条较重

• 相同或相近色彩趋于白色

• 略有光源效果

先给出效果图

手绘风格是在对图像进行灰度化的基础上

立体效果明暗效果叠加而成的

灰度代表图像的明暗变化

梯度值表示灰度的变化率

step1利用像素之间的梯度值和虚拟深度值对图像进行重构

根据灰度变化来模拟人类视觉的远近程度

step2根据灰度变化来模拟人类视觉的远近程度

• 设计一个位于图像斜上方的虚拟光源

• 光源相对于图像的俯视角为Elevation,方位角为Azimuth

• 建立光源对个点梯度值的影响函数

• 运算出各点的新像素值

step3梯度归一化

step4生成图像

完整的代码如下

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190120G11HQ700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券