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程序中使用Cookie的教程
Apr 30 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python ansible服务及剧本编写
Dec 29 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
Python 处理图片像素点的实例
Jan 08 Python
python对常见数据类型的遍历解析
Aug 27 Python
Python 转换文本编码实现解析
Aug 27 Python
python matplotlib拟合直线的实现
Nov 19 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
如何在sublime编辑器中安装python
May 20 Python
Python实现8种常用抽样方法
Jun 27 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
简单实现php上传文件功能
2017/09/21 PHP
基于jquery的合并table相同单元格的插件(精简版)
2011/04/05 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
javascript实现点击小图显示大图
2020/11/29 Javascript
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
python 基于opencv操作摄像头
2020/12/24 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
大一军训感言
2014/01/09 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
机电专业求职信
2014/06/14 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
四则混合运算教学反思
2016/02/23 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python