OpenCV CUDA 模块图像过滤------创建一个形态学滤波器(Morphological Filter)函数createMorphologyFilter()

  • 操作系统: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;
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村北头的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值