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

OpenCV CUDA模块特征检测与描述------创建一个 盒式滤波器(Box Filter)函数createBoxFilter()

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

算法描述

cv::cuda::createBoxFilter 是 OpenCV CUDA 模块中的一个工厂函数,用于创建一个 盒式滤波器(Box Filter),它在 GPU 上对图像进行卷积操作。这个滤波器常用于图像平滑(模糊),其原理是对图像中每个像素的邻域区域取平均值。

函数原型

cv::Ptr<cv::cuda::Filter> cv::cuda::createBoxFilter
(int srcType,              // 输入图像类型int dstType,              // 输出图像类型(通常设为 -1 表示与输入相同)cv::Size ksize,           // 卷积核大小(例如 Size(5, 5))cv::Point anchor = cv::Point(-1, -1),  // 锚点位置,默认为中心点int borderMode = cv::BORDER_DEFAULT,   // 边界填充方式cv::Scalar borderVal = cv::Scalar::all(0)  // 常量边界时的填充值
);

参数说明

参数名类型描述
srcTypeint输入图像的数据类型,如 CV_8UC3(8位无符号三通道图像)。
dstTypeint输出图像的数据类型。若为 -1,表示与输入图像相同。
ksizecv::Size卷积核大小(宽 x 高),例如 cv::Size(5, 5)。建议使用奇数尺寸以保证锚点居中。
anchorcv::Point卷积核的锚点位置,默认是 (-1, -1),即中心点。
borderModeint边界扩展模式,常用值:cv::BORDER_DEFAULT, cv::BORDER_CONSTANT, cv::BORDER_REPLICATE 等。
borderValcv::Scalar如果 borderMode == BORDER_CONSTANT,则用该值填充边界,默认为黑色(全零)。

代码示例

#include <iostream>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/cudafilters.hpp>int main()
{// 读取图像cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_COLOR );if ( h_img.empty() ){std::cerr << "Error: Image not found!" << std::endl;return -1;}// 将图像转换为支持的数据类型cv::Mat h_gray;if ( h_img.channels() == 3 ){cv::cvtColor( h_img, h_gray, cv::COLOR_BGR2GRAY );  // 转换为灰度图像}else if ( h_img.channels() == 4 ){std::vector< cv::Mat > channels;cv::split( h_img, channels );h_gray = channels[ 0 ];  // 使用第一个通道作为灰度图像}else{h_gray = h_img;  // 如果已经是单通道,则直接使用}// 上传图像到 GPUcv::cuda::GpuMat d_src, d_dst;d_src.upload( h_gray );// 创建 Box Filtercv::Ptr< cv::cuda::Filter > boxFilter = cv::cuda::createBoxFilter( d_src.type(),         // 输入图像类型-1,                   // 输出类型与输入一致cv::Size( 5, 5 ),     // 卷积核大小cv::Point( -1, -1 ),  // 锚点默认为中心cv::BORDER_DEFAULT    // 默认边界处理);// 应用滤波器boxFilter->apply( d_src, d_dst );// 下载结果回 CPUcv::Mat h_dst;d_dst.download( h_dst );// 显示结果cv::imshow( "Original", h_img );cv::imshow( "Box Filtered", h_dst );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

http://www.xdnf.cn/news/7887.html

相关文章:

  • GPU P-State 模式说明
  • MCP入门介绍
  • 【VS2017】cpp 文件字符编码方式转换
  • 进阶知识:理解函数装饰器@wraps()的返回值逻辑 和 闭包的深度解析
  • 力扣热题100, 力扣.167两数之和II 力扣80.删除有序数组中的重复项力扣99.恢复二叉搜索树力扣.110平衡二叉树
  • 【项目管理】项目管理中的”三边、六拍、四没和只谈“
  • 软件是什么?
  • Sentinel原理与SpringBoot整合实战
  • 开发经典的瀑布流
  • c++11特性——可变参数模板及emplace系列接口
  • 【ffmpeg】SPS与PPS的概念
  • BurpSuite Montoya API 详解
  • 基于stm32的空气质量监测系统
  • 2025年二级等保实施全攻略:传统架构与云等保方案深度解析
  • 乘法逆元:费马小定理(利用快速乘法幂)(JAVA)
  • GitHub 趋势日报 (2025年05月20日)
  • 洛谷B3840 [GESP202306 二级] 找素数
  • MySQL--day5--多表查询
  • 第22天-Python ttkbootstrap 界面美化指南
  • 漏洞扫描企业如何助力企业预防安全风险应对网络攻击?
  • GUI实验
  • vue3 threejs 物体发光描边
  • Python人工智能算法 模拟退火算法:原理、实现与应用
  • 项目执行中缺乏问题记录和总结,如何改进?
  • [java]数组
  • 7.数据的预测分析及可视化
  • 嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)
  • Word2Vec模型学习和Word2Vec提取相似文本体验
  • 豪越智能仓储:为消防应急物资管理“上锁”
  • Nginx 强制 HTTPS:提升网站安全性的关键一步