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

2023-06-23 08:57:56


(资料图片仅供参考)

用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

获取完整代码,前往公众号:每日治愈系列,回复本篇文章标题即可获取资源!

标签: