OpenCV CUDA模块特征检测与描述------用于创建一个最大值盒式滤波器(Max Box Filter)函数createBoxMaxFilter()
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
createBoxMaxFilter()函数创建的是一个 最大值滤波器(Maximum Filter),它对图像中每个像素邻域内的像素值取最大值。常用于:
- 去除暗噪声(dark noise)
- 提取局部最大值区域
- 膨胀操作的替代方法之一
与 cv::cuda::createBoxFilter 类似,但它的卷积核不是加权平均,而是取最大值。
函数原型
Ptr<Filter> cv::cuda::createBoxMaxFilter
(int srcType,Size ksize,Point anchor = Point(-1, -1),int borderMode = BORDER_DEFAULT,Scalar borderVal = Scalar::all(0) )
参数
-
srcType 输入/输出图像类型。仅支持 CV_8UC1 和 CV_8UC4。
-
ksize 核大小(卷积核的宽度和高度)。
-
anchor 锚点。默认值 (-1) 表示锚点位于卷积核中心。
-
borderMode 像素外推方法(边界填充方式)。详细信息,请参见 borderInterpolate。
-
borderVal 默认边界值
代码示例
#include <opencv2/cudafilters.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>int main()
{// 读取图像cv::Mat h_img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE ); // 确保是单通道图像if ( h_img.empty() ){std::cerr << "Error: Image not found!" << std::endl;return -1;}// 上传图像到 GPUcv::cuda::GpuMat d_src, d_dst;d_src.upload( h_img );// 创建 Max Box Filter(支持 CV_8UC1 或 CV_32FC1)cv::Ptr< cv::cuda::Filter > maxFilter = cv::cuda::createBoxMaxFilter( d_src.type(), // 输入图像类型cv::Size( 5, 5 ), // 卷积核大小cv::Point( -1, -1 ), // 锚点默认为中心cv::BORDER_DEFAULT // 默认边界处理);// 应用滤波器maxFilter->apply( d_src, d_dst );// 下载结果回 CPUcv::Mat h_dst;d_dst.download( h_dst );// 显示结果cv::imshow( "Original", h_img );cv::imshow( "Max Filtered", h_dst );cv::waitKey( 0 );return 0;
}