opencv基础篇 ——(十)非真实感渲染

2024-04-30 22:44
文章标签 基础 opencv 渲染 真实感

本文主要是介绍opencv基础篇 ——(十)非真实感渲染,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染,这些函数可以帮助开发者快速实现各种艺术风格化效果。以下是 OpenCV 中与非真实感渲染相关的几个关键函数及其介绍:

  1. cv::detailEnhance:

    • 用于增强图像的细节表现,通过结合空间域和平滑以及频率域滤波,选择性地增强特定频率范围内的图像成分,从而突出细节。适用于医学影像、遥感图像、艺术图像的细节增强,也可作为图像分析、识别、分割等后续算法的预处理步骤。
  2. cv::pencilSketch:

    • 将彩色图像转换为素描风格(铅笔画效果),生成包含线条图和着色图的双输出图像。通过色彩空间转换、亮度处理、色彩信息处理、色调映射和混合线条图与着色图等步骤,模拟铅笔素描的质感和阴影层次。适用于艺术效果生成、教育与演示、视觉特效等场景。
  3. cv::edgePreservingFilter:

    • 对图像进行边缘保持滤波处理,能够在平滑图像、减少噪声的同时,有效保护图像中的边缘信息不受破坏。支持基于递归或归一化卷积的滤波器,通过边缘检测、空间域平滑、频率域滤波、边缘恢复和逆变换等步骤实现。应用于图像降噪、图像美化、视频处理等场景,保持图像重要边缘特征的同时提升视觉质量。
  4. cv::stylization:

    • 将彩色图像转换为艺术风格化图像,模仿特定艺术风格(如油画、水彩画、素描等)。通过色彩空间转换、亮度处理、对比度与亮度调整、色彩信息处理和后处理等步骤,生成具有艺术风格的输出图像。常用于艺术效果生成、教育与演示、视觉特效,为用户提供一键转换照片为艺术风格的功能。

        除了上述直接相关的非真实感渲染函数外,OpenCV 还提供了众多基础图像处理功能,如滤波、形态学操作、色彩空间转换、直方图均衡化等,这些都可以作为非真实感渲染算法的组成部分或辅助手段。开发者可以根据实际需求,结合这些基础功能和特定的非真实感渲染函数,设计和实现复杂的图像风格转换算法。

        通过调用诸如 cv::detailEnhancecv::pencilSketchcv::edgePreservingFilter 和 cv::stylization 等函数,结合适当的参数调整,可以将普通照片或视频转化为具有绘画、素描、艺术风格等多种非真实感效果的图像,满足不同应用场景的需求。

detailEnhance

        用于增强图像的细节表现。

函数原型:

void cv::detailEnhance(InputArray src,OutputArray dst,float sigma_s,float sigma_r
);
  • float sigma_s: 空间高斯核的标准差。该参数控制对图像进行局部平滑处理的程度。较大的值会使图像更加平滑,减少噪声影响,但可能降低细节增强效果;较小的值则会保留更多细节,但可能导致噪声增加。通常选择在 1.0 到 5.0 的范围内。

  • float sigma_r: 频率域高斯核的标准差。该参数控制在频率域中对图像进行滤波的尺度。它决定了增强图像细节的频率范围。较小的值会增强低频细节,较大的值则会增强高频细节。通常选择在 0.0 到 1.0 的范围内。

功能描述:

cv::detailEnhance 函数通过结合空间域和频率域的处理来实现图像细节的增强。具体步骤如下:

  1. 空间域平滑:首先,对输入图像 src 进行局部平滑处理,通常使用高斯滤波器,其标准差由参数 sigma_s 控制。平滑操作有助于消除图像中的噪声和不相关细节,同时保留主要结构信息。

  2. 频率域处理:将平滑后的图像转换到频域(通常使用傅立叶变换),然后应用一个中心对称的高斯滤波器,其标准差由参数 sigma_r 控制。此步骤旨在选择性地增强特定频率范围内的图像成分,从而突出细节。低频部分通常对应图像的大尺度结构,而高频部分对应边缘、纹理等细微特征。

  3. 逆傅立叶变换:将处理后的频域图像转换回空间域,得到增强细节的中间结果。

  4. 细节对比度增强:最后,通过对原始图像 src 与增强细节的中间结果进行适当的组合(如相减、相除等操作),生成最终的细节增强输出图像 dst。这一过程增强了原始图像中被选择频率范围内的细节对比度,使得这些细节在输出图像中更为明显。

应用场景:

  • 图像增强:在医学影像、遥感图像、艺术图像等领域,通过提高图像细节清晰度,帮助观察者更好地识别和分析图像内容。

  • 图像预处理:作为图像分析、识别、分割等后续算法的预处理步骤,提升算法对图像细节特征的敏感度。

  • 视觉效果优化:在数字摄影、图像编辑、视频后期制作中,用于改善图像的整体观感,使图像看起来更清晰、细腻。

pencilSketch 

        用于将彩色图像转换为素描风格(铅笔画效果)的函数。

函数原型:

void cv::pencilSketch(InputArray src,OutputArray dst1,OutputArray dst2,float sigma_s,float sigma_r,float shade_factor
);

参数说明:

  • OutputArray dst1: 输出的素描线条图。通常是单通道 8-bit 灰度图像,表示铅笔线条的分布。

  • OutputArray dst2: 输出的素描着色图。表示铅笔着色的效果。

  • float sigma_s: 空间高斯核的标准差,用于控制线条图生成过程中的空间平滑程度。较大的值会导致更平滑的线条,较小的值则会产生更锐利、细节丰富的线条。通常取值范围为 0.0 到 10.0。

  • float sigma_r: 频率域高斯核的标准差,用于控制线条图生成过程中的频率域滤波尺度。它决定了保留哪些频率成分来形成线条。较小的值强调低频信息(大尺度结构),较大的值强调高频信息(细节)。通常取值范围为 0.0 到 0.5。

  • float shade_factor: 着色图的阴影因子,控制着色图的对比度和深浅。较大的值会使着色图更暗、对比度更高,模拟铅笔较重的涂抹效果;较小的值则会使着色图更亮、对比度更低,模拟轻柔的着色效果。通常取值范围为 0.0 到 1.0。

功能描述:

cv::pencilSketch 函数通过一系列图像处理步骤将输入的彩色图像转换为具有铅笔画风格的双输出图像:

  1. 色彩空间转换:将输入的彩色图像从 BGR(或 RGB)色彩空间转换到 LAB 色彩空间,以便分离颜色信息和亮度信息。

  2. 亮度处理

    • 线条图生成:对 LAB 色彩空间中的亮度分量 L 使用双边滤波器进行处理,以模拟铅笔线条的质感。双边滤波器结合了空间域和平滑以及像素相似性的考虑,能够在保持边缘的同时去除噪声。滤波参数由 sigma_s 和 sigma_r 控制。
    • 着色图生成:对亮度分量 L 进行对比度调整,使用 shade_factor 参数控制调整程度,生成具有不同阴影层次的着色图。
  3. 色彩信息处理:将处理后的亮度分量与原始色彩空间中的色彩信息(A、B 分量)重新组合,生成初步的素描着色图。

  4. 色调映射:对初步的素描着色图进行色调映射处理,进一步模拟铅笔画特有的色彩风格。

  5. 混合线条图与着色图:最后,将生成的线条图(dst1)与着色图(dst2)按一定方式叠加(如透明度混合),得到最终的铅笔素描效果图像。

应用场景:

  • 艺术效果生成:在图像编辑软件、社交媒体滤镜、艺术创作工具中,为用户提供一键转换照片为素描风格的功能。

  • 教育与演示:在绘画教学、设计草图展示、概念设计交流中,利用铅笔画风格简化复杂图像,突出轮廓和明暗关系。

  • 视觉特效:在电影、动画、游戏等多媒体制作中,为场景添加独特视觉风格或过渡效果。

edgePreservingFilter 

        用于对图像进行边缘保持滤波处理的函数。这种滤波方法能够在平滑图像并减少噪声的同时,有效地保护图像中的边缘信息不受破坏。

函数原型:

void cv::edgePreservingFilter(InputArray src,OutputArray dst,int flags = 1,float sigma_s = 60,float sigma_r = 0.4f
);

参数说明:

  • OutputArray dst: 输出图像,与输入图像具有相同的尺寸和类型。

  • int flags: 滤波器类型标志,可选值包括:

    • cv::RECURS_FILTER: 使用基于递归的滤波器。
    • cv::NORMCONV_FILTER: 使用基于归一化卷积的滤波器。
  • float sigma_s: 空间高斯核的标准差,控制在空间域上进行平滑的程度。较大的值会带来更强的平滑效果,但可能会牺牲一些边缘细节;较小的值则倾向于保留更多的细节,但可能无法充分抑制噪声。通常取值范围为 0.0 到几百之间。

  • float sigma_r: 频率域高斯核的标准差,控制在频率域上进行滤波的尺度。它决定了保留哪些频率成分来保护边缘。较小的值保留更多的高频成分,有利于边缘保持;较大的值保留更多的低频成分,有利于平滑图像。通常取值范围为 0.0 到 1.0。

功能描述:

cv::edgePreservingFilter 函数通过结合空间域和频率域的处理,实现对图像的平滑滤波,同时保持图像边缘的清晰度。具体流程可能因所选滤波器类型(由 flags 参数决定)而略有差异,但总体思路是:

  1. 边缘检测:计算输入图像的梯度或边缘强度,确定图像中潜在的边缘位置。

  2. 空间域平滑:对图像进行一定程度的空间域平滑处理,如使用高斯滤波器,参数由 sigma_s 控制。平滑操作旨在减少图像噪声和不必要的细节,但需避免模糊边缘。

  3. 频率域滤波:在频率域中对图像进行滤波,保留与边缘相关的高频成分,抑制其他非边缘区域的高频噪声。这一步通常涉及计算图像的傅立叶变换,然后应用一个中心对称的高斯滤波器,其标准差由参数 sigma_r 控制。

  4. 边缘恢复:根据之前计算的边缘信息,将平滑后的图像在边缘处进行修正,确保边缘保持清晰。具体方法取决于所选滤波器类型。

  5. 逆变换与输出:将处理后的频域图像转换回空间域,得到最终的边缘保持滤波输出图像 dst

应用场景:

  • 图像降噪:在图像预处理阶段,对含有噪声的图像进行平滑处理,同时保持图像的重要边缘特征,为后续的图像分析、识别或显示提供更高质量的数据。

  • 图像美化:在摄影后期、艺术渲染、用户界面设计等场景下,对图像进行平滑处理以获得更柔和的视觉效果,同时保持图像边缘的清晰度,避免过度模糊导致的失真。

  • 视频处理:在视频流处理中,对连续帧进行边缘保持滤波,既能平滑帧间噪声,又能保持动态边缘的连贯性,提升视频质量。

stylization 

        用于将彩色图像转换为艺术风格化图像的函数。它基于一种称为“图像风格化”的计算机视觉技术,旨在模仿特定艺术风格(如油画、水彩画、素描等)对输入图像进行非真实感渲染。

函数原型:

void cv::stylization(InputArray src,OutputArray dst,float sigma_s = 60,float sigma_r = 0.4f
);

参数说明:

  • OutputArray dst: 输出的艺术风格化图像,与输入图像具有相同的尺寸和类型。

  • float sigma_s: 空间高斯核的标准差,用于控制在空间域上进行平滑的程度。较大的值会带来更强的平滑效果,可能导致图像更抽象;较小的值则倾向于保留更多的细节,使风格化图像更接近原图。通常取值范围为 0.0 到几百之间。

  • float sigma_r: 频率域高斯核的标准差,控制在频率域上进行滤波的尺度。它决定了保留哪些频率成分来形成风格化效果。较小的值保留更多的高频成分,使图像边缘更锐利;较大的值保留更多的低频成分,使图像更平滑。通常取值范围为 0.0 到 1.0。

功能描述:

cv::stylization 函数通过一系列图像处理步骤将输入的彩色图像转换为具有艺术风格的输出图像:

  1. 色彩空间转换:将输入的彩色图像从 BGR(或 RGB)色彩空间转换到 LAB 色彩空间,以便分离颜色信息和亮度信息。

  2. 亮度处理

    • 空间域平滑:对 LAB 色彩空间中的亮度分量 L 使用双边滤波器进行处理,以模拟艺术作品中的平滑过渡和纹理。滤波参数由 sigma_s 控制。
    • 频率域滤波:在频率域中对亮度分量 L 进行滤波,保留与艺术风格相关的频率成分。滤波参数由 sigma_r 控制。
  3. 色彩信息处理:将处理后的亮度分量与原始色彩空间中的色彩信息(A、B 分量)重新组合,生成初步的艺术风格化图像。

  4. 后处理:可能包括色调映射、饱和度调整等额外步骤,以进一步优化艺术风格效果。

应用场景:

  • 艺术效果生成:在图像编辑软件、社交媒体滤镜、艺术创作工具中,为用户提供一键转换照片为艺术风格的功能。

  • 教育与演示:在绘画教学、设计草图展示、概念设计交流中,利用艺术风格化图像简化复杂图像,突出特定艺术手法或风格特征。

  • 视觉特效:在电影、动画、游戏等多媒体制作中,为场景添加独特视觉风格或过渡效果。

效果展示

  • 光线偏暗场景效果对比

  • 人物处理效果对比

  • 人像处理效果对比

总结:

        根据效果可以看出,detailEnhance对图像细节的突显比较明显,edgePreservingFilter 对人物的美白效果非常明显,pencilSketch生成素描画,stylization生成油画效果。

这篇关于opencv基础篇 ——(十)非真实感渲染的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950108

相关文章

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]