图像一般使用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生成图像
完整的代码如下
领取专属 10元无门槛券
私享最新 技术干货