Исходное изображение выглядит голубоватым, поскольку cv2.imread
возвращает изображение с 3 каналами в следующем порядке: синий, зеленый и красный. plt.imshow
работает с изображениями RGB, поэтому вам необходимо преобразовать исходные данные:
bgr_image = cv2.imread(your_image_filename)
rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_image)
Как заявлено Романом, вам лучше использовать библиотеку, а не кодировать фильтр. В вашем конкретном случае cv2.blur
делает именно то, что вы ищете:
# 3x3 mask
blurred_image3 = cv2.blur(bgr_image, (3, 3))
cv2.imwrite('blurred_image3.png', blurred_image3)
# 5x5 mask
blurred_image5 = cv2.blur(bgr_image, (5, 5))
cv2.imwrite('blurred_image5.png', blurred_image5)
Результирующее изображение для маски 3x3:
Результирующее изображение для маски 5x5: