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之print详解
Sep 28 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
Python实现多线程的两种方式分析
Aug 29 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
python3中property使用方法详解
Apr 23 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
详解Python流程控制语句
Oct 28 Python
OpenCV-Python实现图像平滑处理操作
OpenCV-Python模板匹配人眼的实例
健身房被搭讪?用python写了个小米计时器助人为乐
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
OpenCV-Python实现轮廓拟合
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Django drf请求模块源码解析
You might like
PHP面向对象概念
2011/11/06 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
JavaScript实现显示函数调用堆栈的方法
2016/04/21 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
Koa代理Http请求的示例代码
2018/10/10 Javascript
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
python字符串连接方法分析
2016/04/12 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python使用Tesseract库识别验证
2018/03/21 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
就业推荐表自我鉴定
2013/10/29 职场文书
就业表自我评价分享
2014/02/06 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
5s标语大全
2014/06/23 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
初中作文评语
2014/12/25 职场文书
学年个人总结范文
2015/03/05 职场文书
送达通知书
2015/04/25 职场文书
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
通过Python把学姐照片做成拼图游戏
2022/02/15 Python