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数据结构之Array用法实例
Oct 09 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python3中bytes类型转换为str类型
Sep 27 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Pycharm 设置默认头的图文教程
Jan 17 Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
python字典进行运算原理及实例分享
Aug 02 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
JS判断用户用的哪个浏览器实例详解
2018/10/09 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
2020/09/11 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
用Python抢过年的火车票附源码
2015/12/07 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python Subprocess模块原理及实例
2019/08/26 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
部队学习十八大感言
2014/01/11 职场文书
小学新教师培训方案
2014/02/03 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
Python实现8种常用抽样方法
2021/06/27 Python