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

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;
}

运行结果

在这里插入图片描述

相关文章:

  • 从零开始的嵌入式学习day25
  • 时间序列预测的迁移学习
  • 学习黑客了解5分钟了解中间人攻击(MITM)
  • Redis面试题全面解析:从基础到底层实现
  • vLLM v1源码阅读 : 整体流程梳理(详细debug)
  • CAU人工智能class3 优化器
  • java 集合总结
  • 【Vue3】Vue3工程的创建 及 开发者工具的安装
  • 运维Web服务器核心知识与实战指南
  • 时源芯微|π型LC滤波电路
  • Vue3使用DataV报错无法使用的解决方案
  • 手术机器人行业新趋势:Kinova多机械臂协同系统如何突破复杂场景适应性瓶颈?
  • el-radio-group 与 el-dropdown 组合使用的注意事项
  • torch.matmul() VS torch.einsum()
  • 独占内存访问指令LDXR/STXR
  • Linux nbd 网络块设备(2)-内核实现
  • Universal Media Server (UMS)部署指南
  • 如何做好一份技术文档?
  • docker面试题(3)
  • 学习路之uniapp--unipush2.0推送功能--使用
  • 申请域名后怎么做网站/大连网站建设费用
  • 网站推广有哪些方式/东莞关键词优化实力乐云seo
  • 做搜狗网站优化排名软/360指数查询工具
  • 响应式网站建站价格/属于seo网站优化
  • 怎样做网站分流赚钱/怎么买域名自己做网站
  • 做拼货商城网站/企业网络营销推广方案策划