用OpenCV、Python一张RGB颜色的图像经过下面四个步骤就能够生成出一张素描图:
- 将RGB图转化为灰度图。
- 灰度图进行反色操作。
- 对步骤2中的图片进行高斯模糊Gaussian blur。
- 将步骤1中的灰度图像和步骤三中的模糊反色图像混合,这里就用到亮化(Dodging)和暗化(burning)的技术。
公众号:每日治愈系列,回复文章标题,获取完整代码
前三步使用Opencv都是直接可以做到的,我也看到其他的有些博客在尝试解决第四步的问题,因为Opencv内部不提供亮化和暗化的技术。但是,我们采取一些技巧的话,我们将会实现这个功能,最终看起来也会非常地简单。
原图:
编辑
运行Python脚本之后的图片:
编辑
核心代码如下:
for col in range(width):
for row in range(height):
# do for every pixel
if mask[col, row] == 255:
# avoid division by zero
blend[col, row] = 255
else:
# shift image pixel value by 8 bits
# divide by the inverse of the mask
tmp = (image[col, row] << 8) / (255 - mask)
# print('tmp={}'.format(tmp.shape))
# make sure resulting value stays within bounds
if tmp.any() > 255:
tmp = 255
blend[col, row] = tmp
获取完整代码!
公众号:每日治愈系列,回复文章标题,获取完整代码