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 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python内置函数之filter map reduce介绍
Nov 30 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
Python实现完整的事务操作示例
Jun 20 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
Python读写zip压缩文件的方法
Aug 29 Python
Python转换时间的图文方法
Jul 01 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
Pytorch: 自定义网络层实例
Jan 07 Python
Python更新所有已安装包的操作
Feb 13 Python
python3 配置logging日志类的操作
Apr 08 Python
Python getsizeof()和getsize()区分详解
Nov 20 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Python实现简单的可逆加密程序实例
2015/03/05 Python
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
详解Django的CSRF认证实现
2018/10/09 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
Python @property使用方法解析
2019/09/17 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
教育系毕业生中文求职信范文
2013/10/06 职场文书
食品安全检查制度
2014/02/03 职场文书
工程部部长岗位职责
2015/02/12 职场文书
职位证明模板
2015/06/23 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL