当前位置: 首页 > article >正文

OpenCV计算摄影学(21)非真实感渲染之边缘保留滤波器edgePreservingFilter()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

滤波是图像和视频处理中的基础操作。边缘保留平滑滤波器被广泛应用于多种不同场景[98]。
cv::edgePreservingFilter 是一种边缘保留滤波器,用于在平滑图像的同时保留边缘细节。其核心目标是:

  • 降噪:减少图像中的噪声。
  • 边缘保护:避免平滑操作模糊图像中的边缘和重要结构。

工作原理

  • 边缘检测:
    计算图像梯度或边缘强度,标记潜在边缘区域。

  • 空间域平滑:
    使用高斯滤波对图像进行初步平滑(由sigma_s控制范围)。

  • 频率域滤波:
    在频域中应用高斯滤波,保留与边缘相关的高频成分,抑制噪声(由sigma_r控制颜色相似性)。

  • 边缘恢复:
    根据边缘信息修正平滑后的图像,确保边缘清晰(具体方式取决于flags选择的算法)。

  • 输出:
    将处理后的图像转换回空间域,得到最终结果。

    函数原型

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

参数

  • src 输入 8 位 3 通道图像。
  • dst 输出 8 位 3 通道图像。
  • flags 边缘保护滤波器类型:cv::RECURS_FILTER 或 cv::NORMCONV_FILTER。
  • sigma_s 取值范围为 0~200。
  • sigma_r 取值范围为 0~1。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;int main( int argc, char* argv[] )
{Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/jiangnan.jpg" );  // 输入图像if ( src.empty() ){printf( "不能打开图像!\n" );return -1;}namedWindow( "1-原图", WINDOW_AUTOSIZE );imshow( "1-原图", src );Mat dst;edgePreservingFilter( src, dst, 1, 60, 0.44 );  // 调用滤波函数imshow( "2-edgePreservingFilter", dst );waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

OpenCV计算摄影学(21)非真实感渲染之边缘保留滤波器edgePreservingFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 滤波是图像和视频处理中的基础操作。边缘保留平滑滤波器被广泛应用于多种不同场景[98]。 cv::edgePreservingFilter 是一种边缘保留滤波器&#…...

Qemu 详解与 ARM 虚拟机搭建指南

1. Qemu 是什么&#xff1f; Qemu&#xff08;Quick Emulator&#xff09;是一款开源的机器模拟器和虚拟化工具&#xff0c;支持多种硬件架构&#xff08;如 x86、ARM、PowerPC 等&#xff09;。它的核心功能包括&#xff1a; 动态指令翻译&#xff1a;将不同架构的指令实时翻…...

JVM并发编程AQSsync锁ReentrantLock线程池ThreadLocal

并发编程2 synchronized锁实现**AQS****ReentrantLock实现****JUC 常用类**池的概念 ThreadLocalThreadLocal原理内存泄露强引用:软引用弱引用虚引用ThreadLocal内存泄露 synchronized锁实现 synchronized是一个关键字,实现同步,还需要我们提供一个同步锁对象,记录锁状态,记录…...

CMake学习笔记(三):静态库,动态库的生成和使用

一&#xff1a;动态库 接下来我们简单的讲解下动态库的建立和使用:在后面的项目的开发过程中&#xff0c;我们使用第三方库或者我们跑这个项目的时候我们总会看到一些.so的文件&#xff0c;这些就是所谓的动态库,里面的内容就是编译后的源文件&#xff0c;是程序运行时被加载和…...

《Classifier-Free Diffusion Guidance》的核心观点与方法

介绍《Classifier-Free Diffusion Guidance》的核心观点与方法 在扩散模型&#xff08;Diffusion Models&#xff09;的研究中&#xff0c;如何在生成样本的质量与多样性之间找到平衡一直是核心挑战之一。传统的生成模型&#xff08;如GANs或Glow&#xff09;通过截断&#xf…...

什么是数学建模?数学建模是将实际问题转化为数学问题

数学建模是将实际问题转化为数学问题&#xff0c;并通过数学工具进行分析、求解和验证的过程。 一、数学建模的基本流程 问题分析 • 明确目标&#xff1a;确定需要解决的核心问题。 • 简化现实&#xff1a;识别关键变量、忽略次要因素。 • 定义输入和输出&#xff1a;明确模…...

唤起“队列”的回忆

又来博客记录自己的学习心得了&#xff0c;嘿嘿嘿(^&#xff5e;^) 目录 队列的概念和结构&#xff1a; 队列的创建和初始化&#xff1a; 队列入栈&#xff1a; 队列出栈&#xff1a; 队列的销毁&#xff1a; 取队头和队尾数据&#xff1a; 结语&#xff1a; 队列的概念…...

Linux(8.4)NFS

文章目录 一、概念二、详解NFS1&#xff09;软件名2&#xff09;服务名3&#xff09;配置文件4&#xff09;端口号5&#xff09;相关命令 三、部署NFS一、NFS服务端1&#xff09;**配置源&#xff08;本地或者网络源&#xff09;**2&#xff09;2、安装NFS**3&#xff09;启动服…...

【位运算】速算密钥:位运算探秘

文章目录 前言例题一、判定字符是否唯一二、丢失的数字三、两整数之和四、只出现⼀次的数字 II五、消失的两个数字 结语 前言 什么是位运算算法呢&#xff1f; 位运算算法是以位运算为核心操作&#xff0c;设计用来高效解决特定问题的一系列计算步骤集合。它巧妙利用位运算直接…...

STM32G070CBT6读写FLASH中的数据

向FLASH中写入数据函数 /*函数说明&#xff1a;向FLASH中写数据形参&#xff1a;addr-要写入数据的起始地址 data-准备写入数据 len-数据大小返回值&#xff1a;1-成功&#xff0c;0-失败 */ uint8_t FlashWriteData(uint64_t addr,uint8_t data[],size_t len) {uint32_t Fir…...

算法刷题记录——LeetCode篇(4) [第301~400题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何…...

目标检测任务,如何区分两个相近似的目标

首先&#xff0c;要了解清楚检测的场景下&#xff0c;肉眼能否区分出目标的差异性。 如果可以区分&#xff0c;那观察数据周围背景的差异是否较大&#xff0c;可以先通过添加样本来提升模型的检测精度。添加样本时一定要注意&#xff0c;样本标注的准确性&#xff0c;样本的丰…...

中国在 AI 上超越美国,需要另辟蹊径

在过去的几年里&#xff0c;以大型语言模型&#xff08;LLM&#xff09;为核心的人工智能浪潮席卷全球。美国凭借其雄厚的科研基础、顶尖的技术公司以及掌握着关键硬件资源&#xff0c;牢牢占据了这一领域的领先地位。与此同时&#xff0c;中国在AI领域的进步虽然迅速&#xff…...

【实习经历Two:参与开源项目,学习并应用Git】

前端参与开源项目中使用过的git 1.参与开源项目&#xff08;必备技能——git) 参与开源项目首先需要进入自己想参加的项目页面 点击右边的Fork即可复制到自己的仓库 像个人开发时常用的add、commit和push等命令就不过多介绍了&#xff0c;在这里主要是想记录一下自己作为从未…...

AD绘图基本操作

一、基本操作 注意&#xff1a;快捷键都要在英文模式下才能生效 1、移动 按住鼠标右键移动 2、切换桌面栅格距离 G 3、英寸和毫米 尺寸切换 Q 4、元件在3D模式下的移动 3D视角鼠标左键只起到选择元器件并移动之的功能&#xff0c; 单纯鼠标右键只能平移桌面 shift鼠…...

6k ± 1 规则

6k 1 规则 是基于对质数分布规律的观察和数学证明得出的。它指出&#xff0c;除了 2 和 3 之外&#xff0c;所有质数都可以表示为 6k 1 的形式&#xff0c;其中 k 是正整数。以下是详细的证明过程&#xff1a; 1. 质数的基本性质 质数是指大于 1 的自然数&#xff0c;且只能…...

AcWing 5960:输出前k大的数 ← 小根堆

【题目来源】 https://www.acwing.com/problem/content/5963/ 【题目描述】 给定一个长度为 n 的数组 a1,a2,…,an&#xff0c;统计前 k 大的数并且把这 k 个数从大到小输出。 【输入格式】 第一行包含整数 n。 第二行包含 n 个整数 a1,a2,…,an。 第三行包含整数 k。​​​​…...

V2X验证

1. 标准和规范验证 欧洲对 DSRC 和 V2X 系统有一系列的标准和规范,主要由 ETSI (European Telecommunications Standards Institute) 和 IEEE 等组织制定。验证通常包括以下标准和规范: ETSI EN 302 571:这是DSRC在欧洲的主要标准,规定了DSRC系统的技术要求和操作条件。ET…...

创建表空间和表

创建表 1.业务背景 在城市的住宅小区和商业区域中&#xff0c;需要对业主的用水情况及费用缴纳进行有效管理。业主类型涵盖普通居民、商业用户等不同类别&#xff08;业主类型表&#xff09;&#xff0c;每种类型对应不同的水价标准&#xff08;价格表&#xff09;。区域表记…...

dfs(十二)21. 合并两个有序链表 递归解决

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] …...

51单片机指令系统入门

目录 基本概念讲解 一、机器指令​ 二、汇编指令​ &#xff08;一&#xff09;汇编指令的一般格式 &#xff08;二&#xff09;按字节数分类的指令 三、高级指令 总结​ 基本概念讲解 指令是计算机&#xff08;或单片机&#xff09;中 CPU 能够识别并执行的基本操作命令…...

安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算&#xff0c;数据系统时间直取&#xff0c;安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建&#xff0c;本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&am…...

如何玩DeepSeek!15分钟快速创建GIS动态数据可视化仪表盘

DeepSeek最近火遍全球&#xff0c;大家用的都用的不亦乐乎。国外呢&#xff1f;当然也是&#xff0c;最近一上YouTube、X等都是deepseek的推送。 今天介绍一下&#xff0c;我在YouTube上看到的GIS行业与DeepSeek结合的一个案例&#xff1a; 快速轻松构建交互式地图仪表盘&…...

课上测试:MIRACL共享库使用测试

MIRACL(MultiprecisionIntegerandRationalArithmeticC/cLibrary)是著名的密码算法库&#xff0c;设法去官网下载安装MIRACL&#xff0c;提交安装过程截图或过程文本&#xff08;3分&#xff09;. 去github官网下载.zip文件 使用如下命令进行解压 unzip -j -aa -L MIRACL-mast…...

网络编程知识预备阶段

1. OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时&#xff0c;更好地理解和…...

Echo服务详解与实现

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在网络编程中,Echo服务是一个非常基础且重要的服务,它的功能是接收客户端发送的数据,并将相同的数据返回给客户端。本文将详细介绍如何使用Python实现一个简单的Echo服务,并提供完整的代码实例及运行结…...

STM32微控制器_03_GPIO原理与应用

核心内容 STM32 GPIO基本原理&#xff08;熟悉&#xff09;GPIO输出功能HAL库编程实现的应用&#xff08;重点&#xff09;GPIO输入功能HAL库编程实现的应用&#xff08;重点&#xff09; 一.STM32 GPIO基本原理 1.GPIO简介 STM32的GPIO相当于STM32的四肢&#xff0c;一个S…...

零拷贝分析

kafka 零拷贝 请求 - 网口 - socket - 用户态 - 内核缓存区 - 内核态&#xff08;磁盘信息&#xff09; 磁盘 - 内核缓存区 - 用户缓存区 - 网络缓存区 零拷贝&#xff08;Zero-Copy&#xff09; 是一种高效的数据传输技术&#xff0c;旨在减少数据在内存中的拷贝次数&#x…...

爬虫逆向:详细讲述Android底层原理及机制

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Android系统架构1.1 Linux内核层1.2 硬件抽象层(HAL)1.3 系统运行库层1.4 应用框架层1.5 应用层二、Android启动过程三、进程与线程管理四、内存管理机制五、Binder机制六、安全机制七、电源管理机制八、Android …...

电容器基础观念

Take-away: 电容器容值&#xff0c;和「导体的几何形状」&#xff0c;「周围的介电材料」相关。电力线起于正电荷&#xff0c;终止于负电荷。金属互相越靠近&#xff0c;电容越大。Maxwell电容矩阵有负号&#xff0c;SPICE电容矩阵没有负号。Maxwell电容矩阵、SPICE电容矩阵可…...