纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

OpenCV 油画 OpenCV-Python实现油画效果的实例

一天一篇Python库   2021-06-08 我要评论
想了解OpenCV-Python实现油画效果的实例的相关内容吗一天一篇Python库在本文为您仔细讲解OpenCV 油画的相关知识和一些Code实例欢迎阅读和指正我们先划重点:OpenCV,油画下面大家一起来学习吧

油画的实现原理

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

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

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

还有油画因为用色大胆所以我们需要增强图像的色彩空间而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()

运行之后效果如下:

油画效果

水彩效果

像油画效果一样水彩效果也可以用单行代码完成但不包括导入和图像读取

cv2.stylization()

import cv2

img = cv2.imread('img.jpg')

res = cv2.stylization(img, sigma_s=60, sigma_r=0.6)

# sigma_s controls the size of the neighborhood. Range 1 - 200

# sigma_r controls the how dissimilar colors within the neighborhood will be averaged. A larger sigma_r results in large regions of constant color. Range 0 - 1


相关文章

猜您喜欢

  • Python导出导入依赖包 Python怎样导出导入所有依赖包详解

    想了解Python怎样导出导入所有依赖包详解的相关内容吗AI悦创在本文为您仔细讲解Python导出导入依赖包的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Python导出导入依赖包,python导入包的几种方法,python导入包的方式下面大家一起来学习吧..
  • springboot IDEA远程Debug springboot使用IDEA远程Debug

    想了解springboot使用IDEA远程Debug的相关内容吗燕少༒江湖在本文为您仔细讲解springboot IDEA远程Debug的相关知识和一些Code实例欢迎阅读和指正我们先划重点:springboot,IDEA远程Debug,idea,springboot,debug下面大家一起来学习吧..

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式