使用np.random.normal函数对图像进行高斯加噪【实例讲解,可直接使用】

一、函数介绍

np.random.normal函数可生成一组符合指定均值和标准差的高斯分布的随机数。具体使用方式及参数如下:

np.random.normal(mean, std, size)

其中,mean表示均值,std表示方差,size表示形状,即生成一组形状为size的随机数。该函数的返回值类型为

二、实例讲解

对图像进行高斯加噪的代码如下:

# 对图像进行高斯加噪
import cv2
import numpy as np

def add_g(img_ndarray, mean=0, var=30): # mean表示均值,var表示方差
  std = var**0.5

  image_add = img_ndarray + np.random.normal(mean, std, img_ndarray.shape) # image_add元素类型为
  # np.random.normal(mean, std, img_ndarray.shape)
  # 表示生成一组符合均值为mean,标准差为std的高斯分布随机数
  # 该组数的形状为img_ndarray.shape

  image_add = np.clip(image_add, 0, 255).astype(np.uint8) # image_add元素类型为
  # np.clip函数将image_add的值限制在给定的上下界
  # 如果元素值小于下界则将值改为下界值,在本例中,下界值为0
  # 如果大于上界,则将值改为上界值,在本例中,上界值为255

  # uint8是无符号八位整型,表示范围[0,255]的整数。
  # 由于cv2.imread读取的图像数据中的元素类型为np.uint8,因此这里也转为了np.uint8格式。

  return image_add

img_ndarray = cv2.imread(r'D:/ydd-master/05 pycodes/test2.jpg') # # img_ndarray元素类型为
image_add = add_g(img_ndarray)
cv2.imwrite('./image_add.jpg',image_add)

原图及高斯加噪后的图如下,仔细观察可知,右图比左图更为“粗糙”一点。注:上述均值和标准差的取值是参考顶会论文设置的,大家在做图像处理领域,尤其是表情识别领域,可以直接使用上述的add_g函数进行加噪。
使用np.random.normal函数对图像进行高斯加噪【实例讲解,可直接使用】_第1张图片

三、注意事项

1.使用cv2.imread()读取图像会改变图像的通道,即将RGB变为BGR;使用cv2.imwrite()保存图像则会将通道纠正回RGB。

2.cv2.imread()函数读取图像的结果是numpy.ndarray类型,即多维数组的形式。

3.cv2.imread()函数读取的图像数据中的元素类型为np.uint8。np.uint8为无符号八位整型,表示范围[0,255]的整数。

4.np.clip函数将image_add的值限制在给定的上下界。如果元素值小于下界则将值改为下界值,在本例中,下界值为0;如果大于上界,则将值改为上界值,在本例中,上界值为255。

四、结束语

不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。如果你向神求助,说明你相信神的能力。如果神没有帮助你,说明神相信你的能力。

你可能感兴趣的:(深度学习,python,opencv,numpy)