图像加高斯噪声并保存:
import cv2
import numpy as np
def clamp(pv):
if pv > 255:
return 255
elif pv < 0:
return 0
else:
return pv
#给图片增加高斯噪声,计算花费很长时间
def gaussian_noise(src):
image = src
h, w, c = image.shape
for row in range(h):
for col in range(w):
#获取三个高斯随机数
#第一个参数:概率分布的均值,对应着整个分布的中心
#第二个参数:概率分布的标准差,对应于分布的宽度
#第三个参数:生成高斯随机数数量
s = np.random.normal(0, 20, 3)
#获取每个像素点的bgr值
b = image[row, col, 0] #blue
g = image[row, col, 1] #green
r = image[row, col, 2] #red\
#给每个像素值设置新的bgr值
image[row, col, 0] = clamp(b + s[0])
image[row, col, 1] = clamp(g + s[1])
image[row, col, 2] = clamp(r + s[2])
src = cv2.imread('1.jpg',cv2.IMREAD_REDUCED_COLOR_2)
gaussian_noise(src)
cv2.imshow('noise',src)
cv2.imwrite('.//noise.png',src)
cv2.waitKey(0)
cv2.destroyAllWindows()
均值滤波
指用当前像素点周围N*N个像素值的均值来代替当前像素值。使用该方法遍历处理图像内的每一个像素点
函数:
dst = cv2.blur(src, ksize)
其中,ksize为滤波核大小
测试代码:
import cv2
img = cv2.imread('noise.png')
dst = cv2.blur(img, (5,5))
cv2.imshow('original', img)
cv2.imshow('result', dst)
cv2.waitKey()
cv2.destroyAllWindows()
测试结果:
高斯滤波
高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上机算领域内各个像素值不同权重。
使用函数:
dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
sigmaX、sigmaY分别对应X、Y轴方向上卷积核的标准差。
测试代码:
import cv2
img = cv2.imread('noise.png')
dst = cv2.GaussianBlur(img, (5,5), 0, 0)
cv2.imshow('original', img)
cv2.imshow('result', dst)
cv2.waitKey()
cv2.destroyAllWindows()
测试结果:
中值滤波
中值滤波会取当前像素点及其周围临近像素点(一共奇数个像素点)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值。
函数如下:
dst = cv2.medianBlur(img, 3)
测试代码:
import cv2
img = cv2.imread('noise.png')
dst = cv2.medianBlur(img, 3)
cv2.imshow('original', img)
cv2.imshow('result', dst)
cv2.waitKey()
cv2.destroyAllWindows()