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中的内存泄漏
Apr 23 Python
Linux系统上Nginx+Python的web.py与Django框架环境
Dec 25 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
Python闭包思想与用法浅析
Dec 27 Python
PyTorch中Tensor的维度变换实现
Aug 18 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
基于Python的OCR实现示例
Apr 03 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 Python
浅谈Python中的函数(def)及参数传递操作
May 25 Python
详解Python类和对象内容
Jun 22 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
多文件上载系统完整版
2006/10/09 PHP
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
JavaScript实现经典排序算法之选择排序
2016/12/28 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
Bootstrap3多级下拉菜单
2017/02/24 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
初学Python函数的笔记整理
2015/04/07 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
python名片管理系统开发
2020/06/18 Python
python Selenium 库的使用技巧
2020/10/16 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
Hotels.com越南:酒店预订
2019/10/29 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
辞职书格式样本
2015/02/26 职场文书
新郎新娘致辞
2015/07/31 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
JavaScript获取URL参数的方法分享
2022/04/07 Javascript