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


Posted in Python onJune 08, 2021

油画的实现原理

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

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

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

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

运行之后,效果如下:

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

水彩效果

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

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

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

到此这篇关于OpenCV-Python实现油画效果的实例的文章就介绍到这了,更多相关OpenCV 油画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python获取一组数据里最大值max函数用法实例
May 26 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python算法演练_One Rule 算法(详解)
May 17 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
python tkinter基本属性详解
Sep 16 Python
python文件及目录操作代码汇总
Jul 08 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 Python
Python实现视频中添加音频工具详解
Dec 06 Python
基于Python实现射击小游戏的制作
Apr 06 Python
Python各协议下socket黏包问题原理
Apr 12 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
使用Apache的rewrite技术
2006/06/22 PHP
php HtmlReplace输入过滤安全函数
2010/07/03 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
PHP中的替代语法介绍
2015/01/09 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
Javascript操作dom对象之select全面解析
2017/04/24 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
js实现聊天对话框
2020/02/08 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Python基础知识点 初识Python.md
2019/05/14 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Django CSRF跨站请求伪造防护过程解析
2019/07/31 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
美国汽车交易网站:Edmunds
2016/08/17 全球购物
蛋糕店的商业计划书范文
2014/01/27 职场文书
xxx同志考察材料
2014/02/07 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
投资合作协议书
2014/04/17 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
Sql Server之数据类型详解
2022/02/28 SQL Server
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL