import numpy as np
import cv2 as cv
def blur_demo(image):
# 均值模糊
blur = cv.blur(image, (5, 5))
cv.imshow("lena_blur", blur)
def median_blur_demo(image):
# 中值模糊
blur = cv.medianBlur(image, 5)
cv.imshow("lena_blur", blur)
def custom_blur(image):
# 自定义卷积核,/25是使得卷积核元素相加为1
# kernel = np.ones([5, 5], np.float32)/25
# 锐化核
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
"""
filter2D参数解释:
src:输入资源
dst:如若设置该参数,则直接将结果保存值该对象中,可以实现in_place的操作
kernel:卷积核
ddepth:目标图像的深度,如果设置为负数则目标图像的深度与输入图像保持一致
anchor:锚点,默认为卷积核中心
delta:该数值为在原图像数值上增添的亮度值
boderType:边界的类型,由于卷积核可能会超出边界进行处理,因此需要对边界的拓展方式进行定义
有以下几种边界拓展方式:
Various border types, image boundaries are denoted with '|'
* BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh
* BORDER_REFLECT: fedcba|abcdefgh|hgfedcb
* BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba
* BORDER_WRAP: cdefgh|abcdefgh|abcdefg
* BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified 'i'
"""
dis = cv.filter2D(image, -1, kernel)
cv.imshow("custom_blur", dis)
def gaussian_blur(image):
# 高斯模糊:毛玻璃效果
# 指定了ksize(kernel size)则可以不指定sigmaX以及sigmaY(这两个控制在x以及y方向上的高斯标准差)
blured = cv.GaussianBlur(image, ksize=(0, 0), sigmaX=1, sigmaY=1)
cv.imshow("Gaussian blur", blured)
src = cv.imread("data/lena.jpg")
cv.imshow("lena", src)
# blur_demo(src)
# median_blur_demo(src)
# custom_blur(src)
gaussion_blur(src)
cv.waitKey(0)
cv.destroyAllWindows()
OpenCV——对图像进行模糊操作blur
最新推荐文章于 2024-03-14 11:05:12 发布