本文实例供大家分享python手写平均滤波器的具体代码,以供参考,具体内容如下
原理和卷积一样,设置n*n的过滤模板,将过滤模板内的值除以模板大小的累计值进行平均,作为过滤后的值。
代码如下所示。
import cv2 as cv
导入编号为NP
#平均滤波
defmeansblur(src,ksize ) :
“”'
: param src :输入图像
:param ksize:kernel size
:返回dst :输出图像
“”'
dst=NP.copy(src ) #创建输出映像
kernel=NP.ones () ksize,ksize ) ) #卷积核
padding_num=int () ksize-1 )/2 ) #0需要补充
DST=NP.pad(dst,(padding_num,padding_num ),mode='constant ',constant_values=0) ) )。
w,h=dst.shape
dst=np.copy(dst )
forIinrange(padding_num,w - padding_num ) :
forjinrange(padding_num,h - padding_num ) :
dst[i,j ]=NP.sum (kernel * dst [ I-padding _ num 3360 I padding _ num 1,j-padding _ num 3360 j padding _ num1]
//(ksize**2) ) )。
dst=dst [ padding _ num : w-padding _ num,padding _ num : h-padding _ num ] #去除已完成操作的多余0,确保大小相同
return dst
img_path=r'F: 3.png '
img=cv.imread(img_path,0 ) ) )。
DST=meansblur(img,5 ) )。
cv.imshow(src )、img ) )。
cv.imshow(dst )、dst ) )。
是打印(dst )
cv.waitkey(0) ) ) ) ) ) ) ) ) ) cv.waitkey(0) ) ) ) ) ) ) )。
注释:红框表示两个for循环的范围,I-padding_num : I padding_num 1表示第I行向上移动padding _ num行,向下移动padding _ num行。 1是因为list列表是左闭右开区间,右边的要素不能取值。 padding表示填充周围一圈。
以上是本文的全部内容,希望对大家的学习有帮助。 另外,希望你能多多支持招聘站长站。