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

OpenCV 图形API(37)图像滤波-----分离过滤器函数sepFilter()

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

算法描述

应用一个可分离的线性滤波器到一个矩阵(图像)。

该函数对矩阵应用一个可分离的线性滤波器。也就是说,首先,src 的每一行都用一维核 kernelX 进行滤波。然后,所得结果的每一列都使用一维核 kernelY 进行滤波。最终结果被返回。

支持的矩阵数据类型包括 CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1。输出图像必须与输入图像具有相同的类型、大小和通道数。

cv::gapi::sepFilter 是 OpenCV 的 G-API 模块中用于对图像应用分离过滤器(separable filter)的一个函数。这个函数可以用来执行高效的二维卷积操作,特别适用于那些可以分解为两个一维滤波器的情况。

函数原型

GMat cv::gapi::sepFilter 	
(const GMat &  	src,int  	ddepth,const Mat &  	kernelX,const Mat &  	kernelY,const Point &  	anchor,const Scalar &  	delta,int  	borderType = BORDER_DEFAULT,const Scalar &  	borderValue = Scalar(0) 
) 		

注意:
在浮点计算的情况下,如果硬件支持,则会进行向最近的偶数舍入(如果没有,则舍入到最近的值)。
函数文本ID是 “org.opencv.imgproc.filters.sepfilter”。

参数

  • 参数 src: 源图像。

  • 参数 ddepth: 目标图像的期望深度(支持以下 src.depth() 和 ddepth 的组合:

    • 当 src.depth() = CV_8U 时,ddepth 可以是 -1/CV_16S/CV_32F/CV_64F
    • 当 src.depth() = CV_16U/CV_16S 时,ddepth 可以是 -1/CV_32F/CV_64F
    • 当 src.depth() = CV_32F 时,ddepth 可以是 -1/CV_32F/CV_64F
    • 当 src.depth() = CV_64F 时,ddepth 可以是 -1/CV_64F 如果 ddepth=-1,输出图像将具有与源相同的深度)
  • 参数kernelX: 用于滤波每一行的系数。

  • 参数 kernelY: 用于滤波每一列的系数。

  • 参数 anchor: 核内的锚点位置。默认值 (-1,-1) 表示锚点位于内核中心。

  • 参数 delta: 在存储之前添加到滤波结果中的值。

  • 参数 borderType: 像素外推方法,参见 cv::BorderTypes。

  • 参数 borderValue: 在常量边界类型的情况下的边界值。

代码示例

#include <opencv2/gapi/gkernel.hpp>
#include <opencv2/gapi/imgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 读取输入图像cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_COLOR );if ( src.empty() ){std::cerr << "无法读取图像" << std::endl;return -1;}// 定义水平和垂直方向的卷积核cv::Mat kernelX = ( cv::Mat_< float >( 1, 3 ) << 1.0, 2.0, 1.0 );  // 示例水平卷积核cv::Mat kernelY = ( cv::Mat_< float >( 3, 1 ) << 1.0, 2.0, 1.0 );  // 示例垂直卷积核// 设置ddepth、anchor、delta和borderType等参数int ddepth = -1;             // 输出图像将具有与src相同的深度cv::Point anchor( -1, -1 );  // 锚点位于卷积核中心double delta   = 0;          // 不添加额外值int borderType = cv::BORDER_DEFAULT;// 创建G-API网络cv::GMat in;auto out = cv::gapi::sepFilter( in, ddepth, kernelX, kernelY, anchor, cv::Scalar( delta ), borderType );cv::GComputation comp( cv::GIn( in ), cv::GOut( out ) );// 应用到源图像并获取结果cv::Mat dst;comp.apply( cv::gin( src ), cv::gout( dst ) );// 显示结果cv::imshow( "Original Image", src );cv::imshow( "Filtered Image", dst );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

相关文章:

  • SvelteKit 最新中文文档教程(20)—— 最佳实践之性能
  • 系统架构设计师:系统架构概述案例分析与简答题、详细解析与评分要点
  • 【Caddy】:现代化、自动 HTTPS 的 Web 服务器新星
  • 基础(测试用例:介绍,测试用例格式,案例)
  • 并发编程之可见性、原子性、有序性问题
  • npm install 版本过高引发错误,请添加 --legacy-peer-deps
  • 使用nvm install XXX 下载node版本时网络不好导致npm下载失败解决方案
  • 智能麻将出牌组件
  • 【更新完毕】2025泰迪杯数据挖掘竞赛A题数学建模思路代码文章教学:竞赛论文初步筛选系统
  • 2025年广东消防设施操作员(初级)考试练习题
  • Spark大数据分析与实战笔记(第四章 Spark SQL结构化数据文件处理-05)
  • 系统与网络安全------弹性交换网络(1)
  • 解决前端vue项目在linux上,npm install,node-sass 安装失败的问题
  • 线上教学平台(vue+springboot+ssm+mysql)含文档+PPT
  • AI赋能PLC(一):三菱FX-3U编程实战初级篇
  • NoETL×大模型:Aloudata重构数据智能新范式,开启Chat BI新落地之道
  • React 高级特性与最佳实践
  • 自我生成,自我训练:大模型用合成数据实现“自我学习”机制实战解析
  • PostgreSql dump导入问题集合
  • 两个 STM32G0 I2C 通信异常的案例分析
  • 公司网站数据分析公司/今日刚刚发生的军事新闻
  • 广州专门做网站的公司/山东百度推广总代理
  • 做插画的网站/seo高手是怎样炼成的
  • 平安保险网站官方网址/餐饮营销策划与运营
  • 本地电脑做视频网站 外网连接不上/百度推广多少钱
  • 比利时网站的后缀/百度网站怎么提升排名