OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
该函数创建的是一个 最小值滤波器(Minimum Filter),它对图像中每个像素邻域内的像素值取最小值。常用于:
- 去除亮噪声(light noise)
- 提取局部最小值区域
- 腐蚀操作的替代方法之一
与 cv::cuda::createBoxMaxFilter 类似,但它是取邻域内像素的最小值。
参数
参数名 | 类型 | 描述 |
---|---|---|
srcType | int | 输入图像的数据类型。目前仅支持:CV_8UC1、CV_8UC4。 |
ksize | cv::Size | 卷积核大小(宽 x 高),例如 cv::Size(3, 3)。建议使用奇数尺寸以保证锚点居中。 |
anchor | cv::Point | 锚点位置,默认为 (-1, -1) 表示中心点。 |
borderMode | int | 边界填充方式,常用值:cv::BORDER_DEFAULT, cv::BORDER_CONSTANT, cv::BORDER_REPLICATE 等。 |
borderVal | cv::Scalar | 如果 borderMode == BORDER_CONSTANT,则用该值填充边界,默认为黑色(全零)。 |
返回值
- 返回一个指向 cv::cuda::Filter 的智能指针 cv::Ptrcv::cuda::Filter。
- 可通过调用其 .apply() 方法来执行滤波操作。
代码示例
#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_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 );// 创建 Min Box Filtercv::Ptr< cv::cuda::Filter > minFilter = cv::cuda::createBoxMinFilter( d_src.type(), // 输入图像类型(必须是 CV_8UC1 或 CV_8UC4)cv::Size( 5, 5 ), // 卷积核大小cv::Point( -1, -1 ), // 锚点默认为中心cv::BORDER_DEFAULT // 默认边界处理);// 应用滤波器minFilter->apply( d_src, d_dst );// 下载结果回 CPUcv::Mat h_dst;d_dst.download( h_dst );// 显示结果cv::imshow( "Original", h_img );cv::imshow( "Min Filtered", h_dst );cv::waitKey( 0 );return 0;
}