python opencv 平滑图片

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TingHW/article/details/84527003
# 对于一维信号,图片可以被多种低通滤波器(LPF),高通滤波器(HPF)过滤,一个LPF可以用在移除噪点,或者模糊图片。HPF可以用在找图片里找到边界。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')

kernel = np.ones((5,5), np.float32)/25
dst = cv2.filter2D(img, -1, kernel)

cv2.imshow('image',dst)
cv2.imshow('image2',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 平均滤波
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')

blur = cv2.blur(img,(5,5))

cv2.imshow('blur',blur)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 高斯滤波
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')

blur = cv2.GaussianBlur(img,(5,5),0)

cv2.imshow('blur',blur)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 我们应该指定核的宽度和高度,应该是正数和奇数。
# 我们也应该指定X和Y方向的标准偏差sigmaX和sigmaY。如果只有sigmaX被指定,sigmaY就和sigmaX一样。如果两个都是0,它们从核的大小里计算得出。
# 高斯过滤器在移除高斯噪点十分高效。

# 中值滤波

# 这里函数cv2.medianBlur()计算核窗口下的所有像素的中值来替换中心像素点
# 这个特别适合去除椒盐噪点
# 核的大小必须是正奇数。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')

median = cv2.medianBlur(img,5)

cv2.imshow('median',median)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 双边滤波

# 我们之前展示过的滤波器都是倾向于模糊边界的。但是双边滤波不是这样,
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('smallpig.jpg')

blur = cv2.bilateralFilter(img,9,75,75)

cv2.imshow('blur',blur)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 运动模糊图像 hahaha
import cv2
import numpy as np


def motion_blur(image, degree=20, angle=20):
    image = np.array(image)

    # 这里生成任意角度的运动模糊kernel的矩阵, degree越大,模糊程度越高
    M = cv2.getRotationMatrix2D((degree/2, degree/2), angle, 1)
    motion_blur_kernel = np.diag(np.ones(degree))
    motion_blur_kernel = cv2.warpAffine(motion_blur_kernel, M, (degree, degree))

    motion_blur_kernel = motion_blur_kernel / degree        
    blurred = cv2.filter2D(image, -1, motion_blur_kernel)
    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred
img = cv2.imread('smallpig.jpg')
dst = motion_blur(img)
cv2.imshow('dst',dst)

cv2.waitKey(0)
cv2.destroyAllWindows()
# 噪点
import cv2
import numpy as np
def gaussian_noise(image, degree=None):#degree值越大噪点越多
    row, col, ch = image.shape
    mean = 0
    if not degree:
        var = np.random.uniform(0.004, 0.01)
    else:
        var = degree
    sigma = var ** 0.5
    gauss = np.random.normal(mean, sigma, (row, col, ch))
    gauss = gauss.reshape(row, col, ch)
    noisy = image + gauss
    cv2.normalize(noisy, noisy, 0, 255, norm_type=cv2.NORM_MINMAX)
    noisy = np.array(noisy, dtype=np.uint8)
    return noisy
img = cv2.imread('smallpig.jpg')
dst = gaussian_noise(img,5000)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

猜你喜欢

转载自blog.csdn.net/TingHW/article/details/84527003