(资料图片仅供参考)
用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
获取完整代码,前往公众号:每日治愈系列,回复本篇文章标题即可获取资源!
标签: