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

OpenCV图像滤波(16)应用分离式滤波器函数sepFilter2D()的使用

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

算法描述

对图像应用分离式线性滤波器。

该函数对图像应用分离式线性滤波器。首先,src 的每一行都用 1D 内核 kernelX 进行滤波。然后,结果的每一列都用 1D 内核 kernelY 进行滤波。最终结果加上 delta 后存储在 dst 中。

sepFilter2D() 函数是 OpenCV 中用于应用分离式滤波器的一种高效方法。这种滤波器可以将二维卷积分解为两个一维卷积操作,从而显著减少计算量。

函数原型

void cv::sepFilter2D
(InputArray 	src,OutputArray 	dst,int 	ddepth,InputArray 	kernelX,InputArray 	kernelY,Point 	anchor = Point(-1,-1),double 	delta = 0,int 	borderType = BORDER_DEFAULT 
)		

参数

  • 参数src 输入图像。
  • 参数dst 输出图像;与输入图像具有相同的大小和通道数。
  • 参数ddepth 输出图像深度,参见 combinations
  • 参数kernelX 用于过滤每一行的系数矩阵。
  • 参数kernelY 用于过滤每一列的系数矩阵。
  • 参数anchor 内核中的锚点位置。默认值 (-1, -1) 表示锚点位于内核中心。
  • 参数delta 在存储结果之前添加到过滤结果的值。
  • 参数borderType 像素外推方法,参见 BorderTypes。BORDER_WRAP 不支持。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{// 加载图像cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );if ( img.empty() ){std::cout << "无法加载图像,请检查路径是否正确。" << std::endl;return -1;}cv::Size sz2Sh( 400, 600 );cv::resize( img, img, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );// 定义滤波器核cv::Mat kernelX = ( cv::Mat_< float >( 1, 3 ) << 1, 0, -1 );cv::Mat kernelY = ( cv::Mat_< float >( 3, 1 ) << 1, 2, 1 );// 应用分离式线性滤波器cv::Mat dst;cv::sepFilter2D( img, dst, CV_32F, kernelX, kernelY );// 转换为绝对值cv::Mat abs_dst;cv::convertScaleAbs( dst, abs_dst );// 显示结果cv::namedWindow( "Original Image", cv::WINDOW_NORMAL );cv::imshow( "Original Image", img );cv::namedWindow( "Filtered Image", cv::WINDOW_NORMAL );cv::imshow( "Filtered Image", abs_dst );cv::waitKey( 0 );  // 等待按键return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ECMAScript中的对象迭代:`Object.entries()`与`Object.values()`方法解析
  • Pandas:提供了快速、灵活和表达式丰富的数据结构。
  • 微信小程序中实现自动滚动
  • C语言 | Leetcode C语言题解之第336题回文对
  • 第N4周:NLP中的文本嵌入
  • 基本排序算法
  • 编程学习笔记秘籍:开启高效学习之旅
  • iPhone 16 机模视频曝光,五种颜色各有千秋
  • Android drawable与mipmap区别
  • nginx 详解
  • 【JUC】读写锁+邮戳锁
  • Android Camera预览实现方案总结
  • P3423 [POI2005] BAN-Bank Notes
  • MySQL之事务
  • 数据库管理-第229期 Oracle全球分布式数据库-深入1(20240814)
  • Fundebug计费标准解释:事件数是如何定义的?
  • Javascript编码规范
  • JavaWeb(学习笔记二)
  • node和express搭建代理服务器(源码)
  • PHP的类修饰符与访问修饰符
  • Spring声明式事务管理之一:五大属性分析
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 延迟脚本的方式
  • 用 Swift 编写面向协议的视图
  • 正则表达式
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • #stm32驱动外设模块总结w5500模块
  • $.ajax,axios,fetch三种ajax请求的区别
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2020)Java后端开发----(面试题和笔试题)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (力扣)循环队列的实现与详解(C语言)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)fock函数详解
  • (转)甲方乙方——赵民谈找工作
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core控制台应用程序初识
  • ::
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @ModelAttribute注解使用
  • @test注解_Spring 自定义注解你了解过吗?
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [C/C++]关于C++11中的std::move和std::forward
  • [echarts] y轴不显示0
  • [Firefly-Linux] RK3568修改控制台DEBUG为普通串口UART
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间