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获取央视节目单的实现代码
Jul 25 Python
Python中pygame的mouse鼠标事件用法实例
Nov 11 Python
python3获取url文件大小示例代码
Sep 18 Python
python实现从wind导入数据
Dec 03 Python
python实现人脸签到系统
Apr 13 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python的轻量级ORM框架peewee使用教程
Feb 05 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
一个简单的php实现的MySQL数据浏览器
2007/03/11 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
大专生自我评价
2014/01/28 职场文书
毕业证委托书范文
2014/09/26 职场文书
圣诞晚会主持词
2015/07/01 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL