OpenCV-Python实现油画效果与色彩增强详解

Mia
Mia
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何使用OpenCV和Python实现图像油画效果。通过逐行像素重排模拟色块堆积,并结合PIL库增强色彩饱和度。文章提供完整代码示例,涵盖从图像读取、格式转换到最终效果展示的全过程,并简要提及水彩效果的实现方法。

油画效果的实现原理

从视觉上看,油画具有独特的艺术质感,其色彩通常比原图更加鲜艳,但细节上存在失真。

对于艺术爱好者而言,油画的特点在于其不够细腻,且局部因色块堆积而显得模糊。因此,实现油画效果的核心原理是:逐行处理图像,通过打乱相邻像素的顺序来模拟这种模糊感。

关于打乱像素的具体算法,可以随机设计。但需注意边界处理,例如处理到图像左下角最后一个像素时,若尝试取右侧不存在的像素,会导致数组越界错误。因此,在实现油画效果时,通常建议人为裁剪部分边缘像素以规避此类问题。

此外,油画风格用色大胆,因此需要增强图像的色彩空间。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

至此,关于OpenCV-Python实现油画效果的实例介绍完毕。如需了解更多OpenCV油画相关内容,请搜索本站历史文章或继续浏览后续文章。感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。