OpenCV-Python实现油画效果的实例
作者:一天一篇Python库 发布时间:2022-03-26 09:16:37
标签:OpenCV,油画
油画的实现原理
油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真的。
而且对于喜欢欣赏艺术的读者,肯定或多或少关注过油画,油画并不细腻,而且小部分因为色块的堆积非常模糊。所以,我们实现油画的原理是:逐行对图像进行处理,使周围相邻距离的像素进行打乱。
至于打乱的算法,你可以随机设计。不过,需要注意的是在处理到图像边缘时,比如左下角最后一个像素,那么如果打乱其像素,取右边的显然不可取,因为右边没有像素会导致数组越界。所以在处理油画时,可以人为的剪掉部分边缘像素用于混淆。
还有,油画因为用色大胆,所以我们需要增强图像的色彩空间。而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()
运行之后,效果如下:
水彩效果
像油画效果一样,水彩效果也可以用单行代码完成,但不包括导入和图像读取。
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
来源:https://liyuanjinglyj.blog.csdn.net/article/details/115137927


猜你喜欢
- 本文实例为大家分享了JS实现图片放大镜效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html&g
- 实验介绍此次实验帮助大家利用 OpenCV 去读取摄像头的视频流,你可以直接使用笔记本本身的摄像头,也可以用 USB 连接直接的摄像头。如果
- 一、基础介绍Go 是静态(编译型)语言,是区别于解释型语言的弱类型语言(静态:类型固定,强类型:不同类型不允许直接运算)例如 python
- 在风起云涌的互联网浪潮中,产品迭代的速度越来越快。随着用户需求的激增,也不断带来了对设计师能力要求的提高。初入交互设计领域几年来,明显发现可
- 本文实例讲述了Python设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式是一个在软件开发中用来创建对象的设计模式。工厂模式包涵
- 本文主要介绍了pandas针对excel处理的实现,分享给大家,具体如下:读取文件import padasdf = pd.read_csv(
- 无限循环如果条件判断语句永远为 true,循环将会无限的执行下去,如下实例:#!/usr/bin/python# -*- coding: U
- 通过《SQL Server 数据库备份和还原认识和总结(一)》,相信您对数据备份和还原有了一个更深入的认识,在上文中我没有对事务日志做剖析,
- 导语前段时间有小伙伴留言说想让我带大家写写桌面小挂件,今天就满足一下留过类似言的小伙伴的请求呗~不过感觉写桌面的挂历啥的没意思,就简单带大家
- Ajax 技术改变了大型商业 Web 应用程序的外观,但是许多较小的 Web 站点都不具备足够的资源重新构建完整的用户界面(UI)。Ajax
- SQLServer中有五种约束,Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束
- 以下为测试例子。 1.首先创建两张临时表并录入测试数据: 代码如下:create table #temptest1 ( id i
- MySQL 的 SQL 語法調整主要都是使用 EXPLAIN , 但是這個並沒辦法知道詳細的 Ram(Memory)/CPU 等使用量.於
- 这篇是Nicholas讨论如果防止脚本失控的第二篇,主要讨论了如何重构嵌套循环、递归,以及那些在函数内部同时执行很多子操作的函数。基本的思想
- 本文实例讲述了PHP实现向关联数组指定的Key之前插入元素的方法。分享给大家供大家参考,具体如下:PHP 关联数组可以通过三种方式插入新元素
- 引言算法思路假设我们有这样一个生物族群,他们的每个基因片段都是一个个三角形(即只含三个点和颜色信息),他们每个个体表现出的性状就是若干个三角
- 前言:这章我们使用小程序的 scroll-view组件 实现横向滚动和竖向滚动。GitHub: https://github.com/Ewa
- 1、表中字段区分大小写的设置在使用gorm查询的时候,会出现账户名A和a是一样的情况,是因为mysql默认不区分大小写造成的1.问题产生的原
- 回顾面向对象编程让我们先用 30 秒钟来回顾一下 OOP 到底是什么。在面向对象编程语言中,可以定义 类,它们的用途是将相关的数据和行为捆绑
- 环境系统 : win 10 显卡:gtx965m cpu :i7-6700HQ python 3.61 pytorch 0.3包引用impo