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 相关文章推荐
KMP算法精解及其Python版的代码示例
Jun 01 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
python模块之time模块(实例讲解)
Sep 13 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python多进程并行代码实例
Sep 30 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python QTimer实现多线程及QSS应用过程解析
Jul 11 Python
Python实现区域填充的示例代码
Feb 03 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
JS判断一个数是否是水仙花数
2017/06/11 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
举例介绍Python中的25个隐藏特性
2015/03/30 Python
浅谈Python使用Bottle来提供一个简单的web服务
2017/12/27 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
Python操作Excel的学习笔记
2021/02/18 Python
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
新闻学专业应届生求职信
2013/11/08 职场文书
人事档案接收函
2014/01/12 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
作风建设年度心得体会
2014/10/29 职场文书
javascript对象3个属性特征
2021/11/17 Javascript
springboot新建项目pom.xml文件第一行报错的解决
2022/01/18 Java/Android
win10更新失败无限重启解决方法
2022/04/19 数码科技