中值滤波实现的问题-python

"""中值滤波"""
mask=np.zeros((3,3))+1
for i in range(1,w-1):
    for j in range(1,h-1):
        # mask1=mask*b2[x:x+3,y:y+3]
        w=sorted([b2[i-1,j-1],b2[i-1,j],b2[i-1,j+1],b2[i,j-1],b2[i,j],b2[i,j+1],b2[i+1,j-1],b2[i+1,j],b2[i+1,j+1]])
        h=w[5]
        img4[i,j,0]=img4[i,j,0]+h
        w=sorted([g2[i-1,j-1],g2[i-1,j],g2[i-1,j+1],g2[i,j-1],g2[i,j],g2[i,j+1],g2[i+1,j-1],g2[i+1,j],g2[i+1,j+1]])
        h=w[5]
        img4[i,j,1]=img4[i,j,1]+h
        w=sorted([r2[i-1,j-1],r2[i-1,j],r2[i-1,j+1],r2[i,j-1],r2[i,j],r2[i,j+1],r2[i+1,j-1],r2[i+1,j],r2[i+1,j+1]])
        h=w[5]
        img4[i,j,2]=img4[i,j,2]+h

中值滤波代码如上所示,用一种简单的方法实现,然而运行的结果却和预期不同,结果如下:
中值滤波实现的问题-python_第1张图片中值滤波实现的问题-python_第2张图片第一个是原图,第二个是输出结果,不知道为什么会出现这么多黑色像素,但是显示出的像素值不为零,都是在一个合理的值之间,就是会有黑色覆盖,不知道为什么,希望知道的能不吝赐教

已经找到原理,原来是变量命名冲突,以此为戒!最后的结果:
中值滤波实现的问题-python_第3张图片

最终代码:

n=3
template=np.ones(n)
for i in range(1,w-2):
    for j in range(1,h-2):
        # mask1=mask*b2[x:x+3,y:y+3]
       #  c1=img2[i:i+n,j:j+n,0]*template
       #  z1=np.sort(c1)
       #  z1=z1.flatten()
       #  #print(z)
       #  z1=z1[5]
       #  img4[i+2,j+2,0]=img4[i+2,j+2,0]+z1
       #  c2 = img2[i:i + n , j:j + n , 1] * template
       #  z2 = np.sort(c2)
       #  z2 = z2.flatten()
       #  #print(z)
       #  z2 = z2[5]
       #  img4[i+2, j+2, 1] = img4[i+2, j+2, 1] + z2
       #  c3 = img2[i:i + n , j:j + n , 2] * template
       #  z3 = np.sort(c3)
       #  z3 = z3.flatten()
       # # print(z)
       #  z3 = z3[5]
       #  img4[i+2, j+2, 2] = img4[i+2, j+2, 2] + z3

        w=sorted([b2[i-1,j-1],b2[i-1,j],b2[i-1,j+1],b2[i,j-1],b2[i,j],b2[i,j+1],b2[i+1,j-1],b2[i+1,j],b2[i+1,j+1]])
        z=w[5]
        img4[i,j,0]=img4[i,j,0]+z
        w=sorted([g2[i-1,j-1],g2[i-1,j],g2[i-1,j+1],g2[i,j-1],g2[i,j],g2[i,j+1],g2[i+1,j-1],g2[i+1,j],g2[i+1,j+1]])
        z=w[5]
        img4[i,j,1]=img4[i,j,1]+z
        w=sorted([r2[i-1,j-1],r2[i-1,j],r2[i-1,j+1],r2[i,j-1],r2[i,j],r2[i,j+1],r2[i+1,j-1],r2[i+1,j],r2[i+1,j+1]])
        z=w[5]
        img4[i,j,2]=img4[i,j,2]+z
        # if z==z3:
        #     print('T')

你可能感兴趣的:(python,OPENCV)