Python-opencv将任意图片转化为素描图

291 阅读1分钟

 用OpenCV、Python一张RGB颜色的图像经过下面四个步骤就能够生成出一张素描图:

  1. 将RGB图转化为灰度图。
  2. 灰度图进行反色操作。
  3. 对步骤2中的图片进行高斯模糊Gaussian blur。
  4. 将步骤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
 

获取完整代码!

公众号:每日治愈系列,回复文章标题,获取完整代码