您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:OpenCV-Python实现油画效果的实例

51自学网 2021-10-30 22:29:38
  python
这篇教程OpenCV-Python实现油画效果的实例写得很实用,希望能帮到您。

油画的实现原理

油画简单的理解是带有艺术感的图像,色彩相对于原图要更加鲜艳,但却是失真的。

而且对于喜欢欣赏艺术的读者,肯定或多或少关注过油画,油画并不细腻,而且小部分因为色块的堆积非常模糊。所以,我们实现油画的原理是:逐行对图像进行处理,使周围相邻距离的像素进行打乱。

至于打乱的算法,你可以随机设计。不过,需要注意的是在处理到图像边缘时,比如左下角最后一个像素,那么如果打乱其像素,取右边的显然不可取,因为右边没有像素会导致数组越界。所以在处理油画时,可以人为的剪掉部分边缘像素用于混淆。

还有,油画因为用色大胆,所以我们需要增强图像的色彩空间。而python的PIL库有一个现成的类ImageEnhance。该类专门用于图像的增强处理,不仅可以增强图像的亮度,对比度,色度,还可以增强图像的锐度,因此我们实现油画可以通过它快速实现图像增强的操作。

下面,我们来看看其图像增强如何实现。代码如下:

enh_col=ImageEnhance.Color(img)color = 2.0new_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_imgif __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 cv2img = 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 油画内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


OpenCV-Python实现图像平滑处理操作
Python如何导出导入所有依赖包详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。