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用模块pytz来转换时区
Aug 19 Python
python利用拉链法实现字典方法示例
Mar 25 Python
python+ffmpeg视频并发直播压力测试
Mar 06 Python
详解Python中的四种队列
May 21 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
Django 路由层URLconf的实现
Dec 30 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
利用python绘制正态分布曲线
Jan 04 Python
Python竟然能剪辑视频
May 25 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
php实现图片压缩处理
2020/09/09 PHP
JQuery 入门实例1
2009/06/25 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
js实现图片淡入淡出切换简易效果
2016/08/22 Javascript
详解nodejs微信jssdk后端接口
2017/05/25 NodeJs
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python查看数据类型的方法
2019/10/12 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
python属于解释语言吗
2020/06/11 Python
Python通过字典映射函数实现switch
2020/11/06 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
就职演讲稿范文
2014/05/19 职场文书
化妆品活动策划方案
2014/05/23 职场文书
《1942》观后感
2015/06/08 职场文书
母亲去世追悼词
2015/06/23 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
Python使用DFA算法过滤内容敏感词
2022/04/22 Python