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 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
python实现在sqlite动态创建表的方法
May 08 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
python3 map函数和filter函数详解
Aug 26 Python
详解python播放音频的三种方法
Sep 23 Python
通过python3实现投票功能代码实例
Sep 26 Python
jenkins+python自动化测试持续集成教程
May 12 Python
python和js交互调用的方法
Jun 23 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
解决FLASH需要点击激活的代码
2006/12/20 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
python基于socket实现网络广播的方法
2015/04/29 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
pip安装python库的方法总结
2019/08/02 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
在Python中实现字典反转案例
2020/12/05 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
办理生育手续介绍信
2014/01/14 职场文书
小学生期末评语大全
2014/04/21 职场文书
法律专业求职信
2014/05/24 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
孙振耀退休感言
2015/08/01 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
python - asyncio异步编程
2021/04/06 Python