- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
该函数用于创建一个 形态学滤波器(Morphological Filter),用于在 GPU 上执行形态学操作,例如:
- 膨胀(Dilation)
- 腐蚀(Erosion)
- 开运算(Opening)
- 闭运算(Closing)
- 形态梯度(Morphological Gradient)
- 顶帽(Top Hat)
- 黑帽(Black Hat)
由于是 CUDA 实现,该函数适用于大规模图像的高性能处理。
函数原型
Ptr<Filter> cv::cuda::createMorphologyFilter
(
int op,
int srcType,
InputArray kernel,
Point anchor = Point(-1, -1),
int iterations = 1
)
参数
参数名 | 描述 |
---|---|
op | 形态学操作类型。可选类型包括: MORPH_ERODE(腐蚀) MORPH_DILATE(膨胀) MORPH_OPEN(开运算) MORPH_CLOSE(闭运算) MORPH_GRADIENT(形态学梯度) MORPH_TOPHAT(顶帽) MORPH_BLACKHAT(黑帽) |
srcType | 输入/输出图像类型。仅支持以下类型: CV_8UC1、CV_8UC4、CV_32FC1 和 CV_32FC4。 |
kernel | 用于形态学操作的二维 8 位结构元素(即结构核)。 |
anchor | 结构元素内的锚点位置。负值表示锚点位于中心。 |
iterations | 腐蚀和膨胀操作的重复次数。 |
代码示例
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/cudafilters.hpp>
int main()
{
// 读取图像并上传到 GPU
cv::Mat h_input = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );
cv::cuda::GpuMat d_input, d_output;
d_input.upload( h_input );
// 创建结构元素(例如 5x5 的矩形结构元)
cv::Mat kernel = cv::getStructuringElement( cv::MORPH_RECT, cv::Size( 5, 5 ) );
// 创建形态学滤波器(这里以开运算为例)
cv::Ptr< cv::cuda::Filter > morphFilter = cv::cuda::createMorphologyFilter( cv::MORPH_OPEN, // 操作类型:开运算
d_input.type(), // 输入图像类型
kernel, // 结构元
cv::Point( -1, -1 ), // 锚点默认为中心
1 // 迭代次数
);
// 应用滤波器
morphFilter->apply( d_input, d_output );
// 下载结果回 CPU 并显示
cv::Mat h_output;
d_output.download( h_output );
cv::imshow( "Morphology Output", h_output );
cv::waitKey();
return 0;
}