- 操作系统: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() 方法来执行滤波操作。
代码示例
cpp
#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;
}
// 上传到 GPU
cv::cuda::GpuMat d_src, d_dst;
d_src.upload( h_img );
// 创建 Min Box Filter
cv::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 );
// 下载结果回 CPU
cv::Mat h_dst;
d_dst.download( h_dst );
// 显示结果
cv::imshow( "Original", h_img );
cv::imshow( "Min Filtered", h_dst );
cv::waitKey( 0 );
return 0;
}
运行结果
