利用openCV实现中值滤波自定义滤波窗口尺寸的功能(类似halcon中的median_rect函数功能)

本文介绍了如何使用OpenCV实现类似halcon median_rect函数的功能,即自定义中值滤波窗口的宽度和高度。在halcon中,median_rect算子允许独立设置滤波窗口的宽度和高度,而OpenCV的medianBlur函数仅支持正方形窗口。针对特定需求,作者编写了代码,实现了自定义非正方形滤波窗口的中值滤波,并使用希尔排序进行排序。经过测试,处理结果与halcon一致,但速度较慢,未来计划对代码进行优化提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用openCV实现中值滤波自定义滤波窗口尺寸的功能(类似halcon中的median_rect函数功能)

在halcon图像库中有一个常用的中值滤波算子median_rect:
median_rect(Image : ImageMedian : MaskWidth, MaskHeight : )
其中Image为输入图像,ImageMedian为输出图像,MaskWidth为滤波窗口的宽度,MaskHieght为滤波窗口的高度。
openCV中自带了中值滤波的函数medianBlur:
C++: void medianBlur(InputArray src, OutputArray dst, int ksize)
其中src为输入图像,dst为输出图像,ksize为滤波窗口的大小。
halcon中的中值滤波算子相对于openCV中的中值滤波算子,在滤波窗口上有所不同。在halcon中可以分别定义滤波窗口的宽度与高度,生成一个MaskWidthMaskHeight 大小的滤波窗口,然后openCV中只能定义正方形的尺寸为ksizeksize的滤波窗口,无法分别定义宽度和高度,所以相比halcon中的median_rect算子灵活性不高。
在一个具体的项目中,根据实际情况,需要对图像进行中值滤波,当设定滤波窗口宽度为1,高度为11时效果最佳。然后在利用openCV进行实现时,现有的中值滤波函数medianBlur无法满足要求,因此仿照halcon中的滤波函数进行了编写,其中排序采用的是希尔排序法。由于要处理的图像尺寸不大,且时间要求不高,所以对于编写的程序没做过多速度方面的优化。下面贴出具体的代码。

int medianValue(int arr[], int len)
{
	//希尔排序法
	int N = len;
	for (int gap = N / 2; gap > 0; gap /= 2)
	{
		for (int i = gap; i < N; i++)
		{
			int inserted = arr[i];
			int j;
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值