模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷积的一种表现形式。

均值模糊

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。由于图像边框上的像素无法被模板覆盖,造成了图像边缘的缺失。

def blur_demo(image):
    """
    均值模糊:去随机噪声
    blur只能定义卷积核大小
    """
    dst_y = cv.blur(image, (1, 10))  # Y方向模糊,1X10卷积核
    dst_x = cv.blur(image, (10, 1))  # X方向模糊,10X1卷积核
    dst_xy = cv.blur(image, (5, 5))  # 块模糊,5X5卷积核
    cv.imshow("blurY demo", dst_y)
    cv.imshow("blurX demo", dst_x)
    cv.imshow("blurXY demo", dst_xy)

Python3+OpenCV3+Pycharm编程:图像模糊操作Python3+OpenCV3+Pycharm编程:图像模糊操作

Python3+OpenCV3+Pycharm编程:图像模糊操作Python3+OpenCV3+Pycharm编程:图像模糊操作

 中值模糊

将数据从小到大排序后的中间值,用3×3大小模板进行中值滤波。对模板中的9个数进行从小到大排序:1,1,1,2,2,5,6,6,10。中间值为2所有,中值滤波后(2,2)位置的值变为2.同理对其他像素点。

def median_blur_demo(image):
    """中值模糊:去噪"""
    dst_xy = cv.medianBlur(image, 5)
    cv.imshow("median_blurXY demo", dst_xy)

椒盐噪声:

Python3+OpenCV3+Pycharm编程:图像模糊操作

Python3+OpenCV3+Pycharm编程:图像模糊操作

自定义模糊

(锐化)就是突出图像细节或者增强图像被模糊的地方。

def custom_blur_demo(image):
    """自定义模糊"""
    kernel1 = np.ones([5, 5], np.float32)/25  # 5X5 值1卷积核,/25防止溢出
    # 卷积锐化算子,增加对比度
    kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 5X5卷积核
    dst1 = cv.filter2D(image, -1, kernel1)
    dst2 = cv.filter2D(image, -1, kernel2)
    cv.imshow("custom_blur demo1", dst1)
    cv.imshow("custom_blur demo2", dst2)

去噪

Python3+OpenCV3+Pycharm编程:图像模糊操作

锐化

Python3+OpenCV3+Pycharm编程:图像模糊操作

 

代码 

# -*- coding: utf-8 -*-
# By:iloveluoluo
# 2019.3.24
import cv2 as cv
import numpy as np

# 模糊操作:基于离散卷积,定义好每个卷积核,不同卷积核得到不同的卷积效果,模糊是卷积的一种表现形式。

# 均值模糊:均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该
# 模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),
# 再用模板中的全体像素的平均值来代替原来像素值。由于图像边框上的像素无法被模板覆盖,造成了图像边缘的缺失。

# 中值模糊:将数据从小到大排序后的中间值,用3×3大小模板进行中值滤波。对模板中的9个数进行从小到大排序:1,1,1,2,2,5,6,6,10。
# 中间值为2所有,中值滤波后(2,2)位置的值变为2.同理对其他像素点。

# 自定义模糊:(锐化)就是突出图像细节或者增强图像被模糊的地方。


def blur_demo(image):
    """
    均值模糊:去随机噪声
    blur只能定义卷积核大小
    """
    dst_y = cv.blur(image, (1, 10))  # Y方向模糊,1X10卷积核
    dst_x = cv.blur(image, (10, 1))  # X方向模糊,10X1卷积核
    dst_xy = cv.blur(image, (5, 5))  # 块模糊,5X5卷积核
    cv.imshow("blurY demo", dst_y)
    cv.imshow("blurX demo", dst_x)
    cv.imshow("blurXY demo", dst_xy)


def median_blur_demo(image):
    """中值模糊:去噪"""
    dst_xy = cv.medianBlur(image, 5)  # 邻域X*X,X必须为基数
    cv.imshow("median_blurXY demo", dst_xy)


def custom_blur_demo(image):
    """自定义模糊"""
    kernel1 = np.ones([5, 5], np.float32)/25  # 5X5 值1卷积核,/25防止溢出
    # 卷积锐化算子,增加对比度
    kernel2 = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 5X5卷积核
    dst1 = cv.filter2D(image, -1, kernel1)
    dst2 = cv.filter2D(image, -1, kernel2)
    cv.imshow("custom_blur demo1", dst1)
    cv.imshow("custom_blur demo2", dst2)


src = cv.imread('E:/MyFile/Picture/date/lenademo.png')  # 读取椒盐噪声图片

# blur_demo(src)
# median_blur_demo(src)
custom_blur_demo(src)

cv.imshow("src demo", src)
cv.waitKey(0)
cv.destroyAllWindows()

 

相关文章:

  • 2021-12-08
  • 2022-12-23
  • 2022-12-23
  • 2021-05-30
  • 2021-06-16
  • 2021-06-30
  • 2022-01-12
  • 2022-02-24
猜你喜欢
  • 2021-06-15
  • 2022-12-23
  • 2021-11-02
  • 2021-06-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
相关资源
相似解决方案