美文网首页
实现油画效果---OpenCV-Python开发指南(50)

实现油画效果---OpenCV-Python开发指南(50)

作者: 极客学编程 | 来源:发表于2021-05-21 17:20 被阅读0次

    油画的实现原理

    油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真的。

    而且对于喜欢欣赏艺术的读者,肯定或多或少关注过油画,油画并不细腻,而且小部分因为色块的堆积非常模糊。所以,我们实现油画的原理是:逐行对图像进行处理,使周围相邻距离的像素进行打乱。

    至于打乱的算法,你可以随机设计。不过,需要注意的是在处理到图像边缘时,比如左下角最后一个像素,那么如果打乱其像素,取右边的显然不可取,因为右边没有像素会导致数组越界。所以在处理油画时,可以人为的剪掉部分边缘像素用于混淆。

    还有,油画因为用色大胆,所以我们需要增强图像的色彩空间。而python的PIL库有一个现成的类ImageEnhance。该类专门用于图像的增强处理,不仅可以增强图像的亮度,对比度,色度,还可以增强图像的锐度,因此我们实现油画可以通过它快速实现图像增强的操作。

    下面,我们来看看其图像增强如何实现。代码如下:

    enh_col=ImageEnhance.Color(img)
    color = 2.0
    new_img = enh_col.enhance(color)
    

    此处的img是PIL读取的图片,如果想PIL读取图片转到OpenCV读取图片的格式可以通过如下代码完成:

    new_img = cv2.cvtColor(np.asarray(new_img), cv2.COLOR_RGB2BGR)
    

    其中,new_img为PIL读取的图片格式。

    而enhance函数的参数color代表了图像色彩的丰富程度和饱和度,数值为1时保持色度不变,数值增加表示色度比例增加,以此达到图像增强的效果。

    实现油画效果

    既然已经了解了实现油画效果的原理。下面,我们直接上代码来完成油画的操作。具体代码如下所示:

    # 油画效果
    def oil_effect(img):
        h, w, n = img.shape
        new_img = np.zeros((h - 2, w, n), dtype=np.uint8)
        for i in range(h - 2):
            for j in range(w):
                if random.randint(1, 10) % 3 == 0:
                    new_img[i, j] = img[i - 1, j]
                elif random.randint(1, 10) % 2 == 0:
                    new_img[i, j] = img[i + 1, j]
                else:
                    new_img[i, j] = img[i + 2, j]
        return new_img
    
    
    # 图像增强
    def img_add():
        img = Image.open("oil.jpg")
        enh_col = ImageEnhance.Color(img)
        color = 2.0
        new_img = enh_col.enhance(color)
        new_img = cv2.cvtColor(np.asarray(new_img), cv2.COLOR_RGB2BGR)
        return new_img
    
    
    if __name__ == "__main__":
        img = cv2.imread("49.jpg")
        oil_img = oil_effect(img)
        cv2.imwrite("oil.jpg", oil_img)
        cv2.imshow("0", img)
        cv2.imshow("1", img_add())
        cv2.waitKey()
        cv2.destroyAllWindows()
    

    运行之后,效果如下:


    1.png

    相关文章

      网友评论

          本文标题:实现油画效果---OpenCV-Python开发指南(50)

          本文链接:https://www.haomeiwen.com/subject/lvkelltx.html