Python+OpenCV图像处理(第3课---图像平滑处理)

均值滤波

blur()

根据核的大小(rowcol),每个像素值就等于以此像素为中心的周围rowcol个像素的平均值。核大一点,显然越平滑、模糊。
在这里插入图片描述

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread("C:\\imgs\\lenacolor.png", cv2.IMREAD_UNCHANGED)

result = cv2.blur(img, (15, 15))

cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)

result = cv2.blur(img, (7, 7))

cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

方框滤波

boxFilter()

normalize=true的时候,效果同均值滤波;normalize=false的时候,α=1,仅求和。
在这里插入图片描述

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)

result1 = cv2.boxFilter(img, -1, (3,3), normalize=0)
result2 = cv2.boxFilter(img, -1, (6,6), normalize=1)

cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

高斯滤波

GaussianBlur()

与均值滤波对比,其实还是利用周围的元素,不过周围每个元素的权重不同。核宽度和高度必须是奇数。
在这里插入图片描述

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)

result = cv2.GaussianBlur(img, (15, 15), 0)

cv2.imshow("img", img)
cv2.imshow("result", result)

cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

中值滤波

medianBlur()
依据核大小,选取以某个像素为中心的那些像素的中位数作为本像素的值。本滤波,核宽度核高度是相同的,只需要指明边长。

# -*- coding: utf-8 -*-

import cv2

img = cv2.imread("C:\\imgs\\lenaNoise.png", cv2.IMREAD_UNCHANGED)

result = cv2.medianBlur(img, 3)

cv2.imshow("img", img)
cv2.imshow("result", result)

cv2.waitKey()
cv2.destroyAllWindows()

去椒盐效果确实比以上几个滤波都好。。。
在这里插入图片描述

特别说明

本文参考网易云课堂《Python+OpenCV图像处理》

发布了323 篇原创文章 · 获赞 193 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/ccnuacmhdu/article/details/103816162