1.手绘效果的几个特征:
(1)黑白灰色。
(2)边界线条较重。
(3)相同或相近色彩趋于白色。
(4)略有光源效果。
2.图像的手绘效果实现
(1)利用像素之间的梯度值和虚拟深度值对图像进行重构,根据灰度变化来模拟人类视觉的远近程度。
(2)考虑光源效果,根据灰度变化来模拟人类视觉的远近程度:
①设计一个位于图像斜上方的虚拟光源。
②光源相对于图像的俯视角为Elevation,方位角为Azimuth。
③建立光源对各点梯度值的影响函数。
④运算出各点的新像素值。
3.对图像变换操作的一般流程
(1)读入图像文件。
(2)获得RGB值。
(3)对RGB值进行运算修改。
(4)另存为新图像。
4.图像的变换
1)convert()函数
对于彩色图像,不管其图像格式是PNG,还是BMP,或者是JPG,在PIL中,使用Image模块的open()函数打开后,返回的图像对象的模式都是“RGB”。而对于灰度图像,不管其图像格式是PNG,还是BMP,或者是JPG,打开后,其模式为“L”。(www.xing528.com)
模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转换为“L”模式是按照下面的公式转换的:
L=R*299/1000+G*587/1000+B*114/1000
2)归一化处理
(1)np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float'):将图像以灰度图的方式打开并将数据转为float存入np中。
(2)np.gradient(a):求a的梯度,返回的是二元信息,可分别赋值给grad_x、grad_y,将梯度按照深度等级计算并且归一化处理。
(3)将梯度归一化,构造x和y轴梯度的三维归一化单位坐标系A=np.sqrt(grad_x**2+grad_y**2+1)。
3)建立光源效果
np.cos(vec_el)为单位光线在地平面上的投影长度,"dx"、"dy"、"dz"是光源对x、y、z三方向的影响程度。
梯度和光源相互作用,将梯度转化为灰度b=255*(dx*uni_x+dy*uni_y+dz*uni_z)。
5.代码实现
例6_3_pic_trans.py
6.效果预览
手绘效果前原图如图6-6所示。
手绘效果图如图6-7所示。
图6-6 手绘效果前原图
图6-7 手绘效果图
案例参考来源:https://blog.csdn.net/weixin_43232955/article/details/103672707。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。