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实现简单的计时器功能函数
Mar 14 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
python多进程下的生产者和消费者模型
May 07 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
浅谈Python数学建模之数据导入
Jun 23 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
div实现自适应高度的textarea实现angular双向绑定
2017/01/08 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
深入解析nodejs HTTP服务
2017/07/25 NodeJs
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
Python实现的建造者模式示例
2018/08/06 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
中年人生感言
2014/02/04 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
手机销售员岗位职责
2015/04/11 职场文书
公司奖励通知
2015/04/21 职场文书
表扬信范文
2015/05/04 职场文书
担保书范文
2019/07/09 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
千万级用户系统SQL调优实战分享
2022/03/03 MySQL
python 单机五子棋对战游戏
2022/04/28 Python