OpenCV-Python实现油画效果的实例
作者:一天一篇Python库 时间:2022-03-26 09:16:37
油画的实现原理
油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真的。
而且对于喜欢欣赏艺术的读者,肯定或多或少关注过油画,油画并不细腻,而且小部分因为色块的堆积非常模糊。所以,我们实现油画的原理是:逐行对图像进行处理,使周围相邻距离的像素进行打乱。
至于打乱的算法,你可以随机设计。不过,需要注意的是在处理到图像边缘时,比如左下角最后一个像素,那么如果打乱其像素,取右边的显然不可取,因为右边没有像素会导致数组越界。所以在处理油画时,可以人为的剪掉部分边缘像素用于混淆。
还有,油画因为用色大胆,所以我们需要增强图像的色彩空间。而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
标签:OpenCV,油画
0
投稿
猜你喜欢
django多对多表的创建,级联删除及手动创建第三张表
2022-08-13 02:10:48
Python 下载Bing壁纸的示例
2023-11-20 00:14:41
基于python实现学生管理系统
2021-11-24 21:07:48
整理的比较全的一句话后门代码(方面大家查找后门)
2023-06-17 18:30:29
Python 实现删除某路径下文件及文件夹的实例讲解
2021-05-07 08:31:49
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2023-03-15 20:32:40
Python实现字典排序、按照list中字典的某个key排序的方法示例
2022-06-10 15:21:38
JavaScript函数重载操作实例浅析
2024-04-25 13:12:04
python3 pathlib库Path类方法总结
2022-06-10 18:38:11
学习JavaScript设计模式之中介者模式
2024-04-17 10:07:57
Python中关于property使用的小技巧
2021-01-25 04:35:44
python添加模块搜索路径和包的导入方法
2023-11-24 03:09:49
在python中使用xlrd获取合并单元格的方法
2023-09-09 17:00:43
js模拟电脑选择多文件夹效果_选区代码
2024-05-10 14:08:08
Python字符串格式化f-string多种功能实现
2021-01-09 22:56:45
关于Vue3中的响应式原理
2024-04-30 10:29:23
mysql 5.7.16 winx64安装配置方法图文教程
2024-01-26 22:30:25
Vue中$forceUpdate()的使用方式
2024-06-05 09:15:53
MySQL学习之基础命令实操总结
2024-01-16 17:27:32
pytorch cnn 识别手写的字实现自建图片数据
2023-04-18 02:39:22