代码如下所示:
#encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
img = cv2.imread('test01.png')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#方框滤波
result = cv2.boxFilter(source, -1, (5,5), normalize=1)
#显示图形
titles = ['Source Image', 'BoxFilter Image']
images = [source, result]
for i in xrange(2):
plt.subplot(1,2,i 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show
代码中使用5*5的核,normalize=1表示进行归一化处理,此时与均值滤波相同,输出结果如下图所示:
下面是图像左上角处理前后的像素结果:
print(source[0:3, 0:3, 0])
#[[115 180 106]
# [ 83 152 72]
# [ 55 58 55]]
print(result[0:3, 0:3, 0])
#[[92 90 78]
# [92 89 77]
# [82 80 72]]
如果省略参数normalize,则默认是进行归一化处理。如果normalize=0则不进行归一化处理,像素值为周围像素之和,图像更多为白色。
#encoding:utf-8
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取图片
img = cv2.imread('test01.png')
source = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
#方框滤波
result = cv2.boxFilter(source, -1, (5,5), normalize=0)
#显示图形
titles = ['Source Image', 'BoxFilter Image']
images = [source, result]
for i in xrange(2):
plt.subplot(1,2,i 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show
输出结果如下图所示:
上图很多像素为白色,因为图像求和结果几乎都是255。如果设置的是2*2矩阵,只取四个像素结果要好些。
result = cv2.boxFilter(source, -1, (2,2), normalize=0)