书中代码感觉有错误,理解的可以交流
#中值平滑,去除椒盐噪声,同时边缘锐利较好。如果取最大最小值相当于形态学
#添加椒盐噪声
import numpy as np
from scipy import signal
import cv2
def salt(image,number):
rows,cols = image.shape
saltImage = np.copy(image)
for i in range(number):
randR = random.randint(0,rows-1)
randC = random.randint(0,cols-1)
saltImage[randR][randC] = 255
return saltImage
def medianBlur(image,winSize):
rows,cols = image.shape
winH,winW = winSize
halfWinH = (winH-1)/2
halfWinW = (winW-1)/2
medianBlurImage = np.zeros(image.shape,image.dtype)
for r in range(rows):
for c in range(cols):
rTop = 0 if r-halfWinH<0 else r-halfWinH
rBottom = rows-1 if r+halfWinH>rows-1 else r+halfWinH
cLeft = 0 if c-halfWinW<0 else c-halfWinW
cRight = cols-1 if c+halfWinW>cols-1 else c+halfWinW
print(rTop,rBottom,cLeft,cRight)
#取邻域
region = image[int(rTop):int(rBottom+1),int(cLeft):int(cRight+1)]
print(region)
#求中值
medianBlurImage[r][c] = np.median(region)
return medianBlurImage
if __name__ =='__main__':
#image = cv2.imread('E:\\sy2\\5\\img6.jpg',cv2.IMREAD_GRAYSCALE)
image = np.array([[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7],
[1,2,3,4,5,6,7]],np.uint8)
medianBlurImage = medianBlur(image,(3,3))
print(medianBlurImage)
#medianBlurImage = medianBlur(image,(3,3))
#cv2.namedWindow("image",cv2.WINDOW_NORMAL)
#cv2.imshow('image',image)
#cv2.imshow('medianBlurImage',medianBlurImage)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
在这里插入代码片
运行结果
0 1.0 0 1.0
[[1 2]
[1 2]]
0 1.0 0.0 2.0
[[1 2 3]
[1 2 3]]
0 1.0 1.0 3.0
[[2 3 4]
[2 3 4]]
0 1.0 2.0 4.0
[[3 4 5]
[3 4 5]]
0 1.0 3.0 5.0
[[4 5 6]
[4 5 6]]
0 1.0 4.0 6.0
[[5 6 7]
[5 6 7]]
0 1.0 5.0 6
[[6 7]
[6 7]]
0.0 2.0 0 1.0
[[1 2]
[1 2]
[1 2]]
0.0 2.0 0.0 2.0
[[1 2 3]
[1 2 3]
[1 2 3]]
0.0 2.0 1.0 3.0
[[2 3 4]
[2 3 4]
[2 3 4]]
0.0 2.0 2.0 4.0
[[3 4 5]
[3 4 5]
[3 4 5]]
0.0 2.0 3.0 5.0
[[4 5 6]
[4 5 6]
[4 5 6]]
0.0 2.0 4.0 6.0
[[5 6 7]
[5 6 7]
[5 6 7]]
0.0 2.0 5.0 6
[[6 7]
[6 7]
[6 7]]
1.0 3.0 0 1.0
[[1 2]
[1 2]
[1 2]]
1.0 3.0 0.0 2.0
[[1 2 3]
[1 2 3]
[1 2 3]]
1.0 3.0 1.0 3.0
[[2 3 4]
[2 3 4]
[2 3 4]]
1.0 3.0 2.0 4.0
[[3 4 5]
[3 4 5]
[3 4 5]]
1.0 3.0 3.0 5.0
[[4 5 6]
[4 5 6]
[4 5 6]]
1.0 3.0 4.0 6.0
[[5 6 7]
[5 6 7]
[5 6 7]]
1.0 3.0 5.0 6
[[6 7]
[6 7]
[6 7]]
2.0 4.0 0 1.0
[[1 2]
[1 2]
[1 2]]
2.0 4.0 0.0 2.0
[[1 2 3]
[1 2 3]
[1 2 3]]
2.0 4.0 1.0 3.0
[[2 3 4]
[2 3 4]
[2 3 4]]
2.0 4.0 2.0 4.0
[[3 4 5]
[3 4 5]
[3 4 5]]
2.0 4.0 3.0 5.0
[[4 5 6]
[4 5 6]
[4 5 6]]
2.0 4.0 4.0 6.0
[[5 6 7]
[5 6 7]
[5 6 7]]
2.0 4.0 5.0 6
[[6 7]
[6 7]
[6 7]]
3.0 5.0 0 1.0
[[1 2]
[1 2]
[1 2]]
3.0 5.0 0.0 2.0
[[1 2 3]
[1 2 3]
[1 2 3]]
3.0 5.0 1.0 3.0
[[2 3 4]
[2 3 4]
[2 3 4]]
3.0 5.0 2.0 4.0
[[3 4 5]
[3 4 5]
[3 4 5]]
3.0 5.0 3.0 5.0
[[4 5 6]
[4 5 6]
[4 5 6]]
3.0 5.0 4.0 6.0
[[5 6 7]
[5 6 7]
[5 6 7]]
3.0 5.0 5.0 6
[[6 7]
[6 7]
[6 7]]
4.0 6.0 0 1.0
[[1 2]
[1 2]
[1 2]]
4.0 6.0 0.0 2.0
[[1 2 3]
[1 2 3]
[1 2 3]]
4.0 6.0 1.0 3.0
[[2 3 4]
[2 3 4]
[2 3 4]]
4.0 6.0 2.0 4.0
[[3 4 5]
[3 4 5]
[3 4 5]]
4.0 6.0 3.0 5.0
[[4 5 6]
[4 5 6]
[4 5 6]]
4.0 6.0 4.0 6.0
[[5 6 7]
[5 6 7]
[5 6 7]]
4.0 6.0 5.0 6
[[6 7]
[6 7]
[6 7]]
5.0 6 0 1.0
[[1 2]
[1 2]]
5.0 6 0.0 2.0
[[1 2 3]
[1 2 3]]
5.0 6 1.0 3.0
[[2 3 4]
[2 3 4]]
5.0 6 2.0 4.0
[[3 4 5]
[3 4 5]]
5.0 6 3.0 5.0
[[4 5 6]
[4 5 6]]
5.0 6 4.0 6.0
[[5 6 7]
[5 6 7]]
5.0 6 5.0 6
[[6 7]
[6 7]]
[[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]
[1 2 3 4 5 6 6]]在这里插入代码片
opencv提供中值平滑函数
medianBlur(src,dst,ksize)
src 输入
dst 输出
ksize 窗口(3,3)