首页 理论教育 实现图片手绘风格效果的案例

实现图片手绘风格效果的案例

时间:2023-06-27 理论教育 版权反馈
【摘要】:模式“L”为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。

实现图片手绘风格效果的案例

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。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈