1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > opencv最大值滤波(不局限于图像)

opencv最大值滤波(不局限于图像)

时间:2018-12-04 21:56:53

相关推荐

opencv最大值滤波(不局限于图像)

opencv中有较多滤波函数,如中值滤波等,但没有最大值和最小值滤波。本文将介绍用python numpy实现最大值滤波功能,可以说是不需要借助opencv即可实现。

1 定义函数maxBlur

定义最大值滤波的函数为maxBlur,包含3个参数,分别如下所示:

(1)image:输入图像,array类型。

(2)kernel:最大值范围,tuple类型,第一个元素表示x方向取最大值的范围,第二个元素表示y方向取最大值的范围。

(3)limit:需要最大值滤波的元素,tuple类型,如(a,b)表示像素值范围在[a, b]的像素才进行最大值滤波。

该函数做到了以下几个兼容性:

(1)适合灰度图片或者RGB图片。

(2)不局限于图像的数组,array。

(3)适合任意数量的通道数。

2 参考程序

# -*- coding: utf-8 -*-"""乐乐感知学堂公众号@author: /suiyingy"""import numpy as npdef maxBlur(image, kernel=(3, 3), limit=(0, 255)):"""Parameters----------image : array, 输入矩阵或数组.kernel : tuple or list, optional分别为x、y方向上的最大值取值区间范围. The default is (3, 3).limit : tuple or list, optional指定进行最大值滤波的像素范围. The default is (0, 255).Returns-------image_c : array,处理后矩阵或数组。"""image_c = image.copy()if len(image_c.shape) == 2:image_c = image_c[:, :, np.newaxis]h, w, c = image_c.shapeimage_c1 = image_c.copy()for i in range(h):for j in range(w):x1 = max(j-kernel[0]//2, 0)x2 = min(x1 + kernel[0], w)y1 = max(i-kernel[1]//2, 0)y2 = min(y1 + kernel[1], h)for k in range(c):if image_c[i, j, k] >= limit[0] and image_c[i, j, k] <= limit[1]:sub_img = image_c1[y1:y2, x1:x2, k]image_c[i, j, k] = np.max(sub_img)if len(image.shape) == 2:image_c = image_c.reshape(h, w)return image_cif __name__ == '__main__':np.random.seed(1)x = np.random.randint(0, 256, (10, 10))x[x<150] = 0y = maxBlur(x)print('x:\n', x)print('y:\n', y)

3 测试结果

更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。