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

news2025/1/9 1:09:22

        非真实感渲染(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生成油画效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1636233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

医疗大模型华佗GPT-2:医学问答超越GPT-4,通过2023年国家执业药师考试

前言 随着人工智能技术的快速发展,特别是在自然语言处理(NLP)领域,大型预训练模型如GPT系列已经显示出在多个领域的强大应用潜力。最近,华佗GPT-2医疗大模型的发布,不仅标志着人工智能在医学领域的一大进步,更是在202…

Linux IP Forwarding路由转发实验

linux 路由转发功能 Linux 操作系统具备路由转发功能,路由功能是指 Linux 操作系统提供的路由管理和转发功能,它允许 Linux 主机在网络中正确地转发数据包,并确保数据包能够达到其目的地。 出于安全考虑,Linux系统默认是禁止数据…

vscode 检查更新 没有检查更新按钮

vscode 检查更新 没有检查更新按钮 1、问题描述2、问题分析3、解决方法 1、问题描述 今天在使用vscode写markdown文档时,需要粘贴图片到markdown文档中,结果无法粘贴进来,显示如下:只粘贴了image.png这几个字。 2、问题分析 搜索…

交通运输智慧监管平台---强化物流安全与效率的新举措

一、建设背景 随着社会对于交通安全和环境保护的要求不断提高,对卡车运输的监管和合规性要求也逐渐加强。为了满足快速发展的物流需求,提高供应链协同和可追溯性、解决安全问题、提高运输效率和降低成本,我们利用现代技术和信息化手段着力建设…

QT - 创建Qt Widgets Application项目

在Qt中结合OpenGL使用,可以创建一个Qt Widgets应用程序项目。在创建项目时,您可以选择使用OpenGL模板来生成一个已经集成了OpenGL的项目。这个模板会自动帮助您集成OpenGL和Qt,并生成一个基本的OpenGL窗口。您可以在这个窗口中进行OpenGL的开…

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Spark SQL编程初级实践

参考链接 Spark编程: Spark SQL基本操作 2020.11.01_df.agg("age"->"avg")-CSDN博客 RDD编程初级实践-CSDN博客 Spark和Hadoop的安装-CSDN博客 1. Spark SQL基本操作 { "id":1 , "name":" Ella" , "age":…

深入理解正则表达式:从入门到精通

title: 深入理解正则表达式&#xff1a;从入门到精通 date: 2024/4/30 18:37:21 updated: 2024/4/30 18:37:21 tags: 正则Python文本分析日志挖掘数据清洗模式匹配工具推荐 第一章&#xff1a;正则表达式入门 介绍正则表达式的基本概念和语法 正则表达式是一种用于描述字符串…

Docker安装Nginx端口映射|挂载目录查看

文章目录 前言Docker安装nginx怎么查看端口映射|挂载映射 前言 Docker 的作用主要体现在应用隔离、跨平台部署、快速部署、环境一致性以及资源隔离和管理等方面&#xff0c;为软件开发和运维带来了很多便利和优势。 在服务器&#xff08;虚拟机&#xff09;中安装 Nginx、MyS…

从源头上减少BUG:掌握Java中的label和assert语句!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中&#xff0c;我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式&#xff0c;具有跨平台、易读性高等优点&#xff0c;因此在许多场合下都更为适用。那么&#xff0c;如何实现Word转PDF呢&#xff1f;本文将介绍几种常用的方法&#xff0c;帮…

巧用 TiCDC Syncpiont 构建银行实时交易和准实时计算一体化架构

本文阐述了某商业银行如何利用 TiCDC Syncpoint 功能&#xff0c;在 TiDB 平台上构建一个既能处理实时交易又能进行准实时计算的一体化架构&#xff0c;用以优化其零售资格业务系统的实践。通过迁移到 TiDB 并巧妙应用 Syncpoint&#xff0c;该银行成功解决了原有多个 MySQL 集…

Ubuntu C++ man手册安装及使用

Ubuntu下C++ man手册安装 C++在线文档: http://www.cplusplus.com/reference/ 第一种办法:使用cppman $ sudo apt install cppman 使用方法 第二种办法: 打开网页:GCC mirror sites- GNU Project 点击下图中的突显行链接: Russia, Novosibirsk:

使用groovy+spock优雅的进行单测

使用groovyspock优雅的进行单测 1. groovyspock示例1.1 简单示例1.2 增加where块的示例1.3 实际应用的示例 2. 单测相关问题2.1 与SpringBoot融合2.2 单测数据与测试数据隔离2.3 SQL自动转换&#xff08;MySQL -> H2&#xff09; 参考 Groovy是一种基于JVM的动态语言&#x…

安卓获取SHA

1&#xff1a;安卓通过签名key获取SHA 方式有两种&#xff0c; 1、电脑上来存在eclipse的用户或正在使用此开发工具的用户就简单了&#xff0c;直接利用eclipse 走打包流程&#xff0c;再打包的时候选择相应的签名&#xff0c;那么在当前面板的下面便会出现签名的相关信息。 2、…

Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

Java根据模板动态生成Pdf&#xff1a;添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64 引言【Java根据模板动态生成Pdf资源地址】示例一&#xff1a;动态生成带页码的PDF报告示例二&#xff1a;加密PDF以保护敏感信息示例三&#xff1a;应…

netty整合springboot之后自动重连失效,如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【AIGC调研系列】InternVL开源多模态模型与GPT-4V的性能对比

InternVL和GPT-4V都是多模态模型&#xff0c;但它们在性能、参数量以及应用领域上有所不同。 InternVL是一个开源的多模态模型&#xff0c;其参数量为60亿&#xff0c;覆盖了图像/视频分类、检索等关键任务&#xff0c;并在32个视觉-语言基准测试中展现了卓越性能[2]。InternV…

设计模式-01 设计模式单例模式

设计模式-01 设计模式单例模式 目录 设计模式-01 设计模式单例模式 1定义 2.内涵 3.使用示例 4.具体代码使用实践 5.注意事项 6.最佳实践 7.总结 1 定义 单例模式是一种设计模式&#xff0c;它确保一个类只能被实例化一次。它通过在类内部创建类的唯一实例并提供一个全…

c#数据库: 10.调用存储过程查询信息,并显示在窗体上

查询女生信息&#xff0c;并将信息显示在窗体上: 原数据表//右键数据库名,新建查询 ------------- 新建查询窗口,添加新建存储过程Procedure_GetGirls1和查询代码如下 : CREATE PROCEDURE dbo.Procedure_GetGirls1 /*存储过程名称*/ AS SELECT * f…