当前位置: 首页 > 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;
}

运行结果

在这里插入图片描述

http://www.dtcms.com/a/205334.html

相关文章:

  • 从零开始的嵌入式学习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推送功能--使用
  • Python包管理工具uv 国内源配置
  • XCOSnTh-fatfsShell
  • 使用Gemini, LangChain, Gradio打造一个书籍推荐系统 (第一部分)
  • 友思特方案 | 光示原形:高精度晶圆缺陷检测的高功率UVLED方案
  • SOC-ESP32S3部分:4-参数配置可视化menuconfig
  • 如何通过外链建设提升Shopify独立站的权重和排名
  • 第9.1讲、Tiny Encoder Transformer:极简文本分类与注意力可视化实战
  • 23种经典设计模式(GoF设计模式)
  • 【spring】spring学习系列之十一:spring的事件监听
  • 《会计研究》顶刊数据复刻!上市公司环境规制压力数据及研究价值