python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
目录
- 1、高斯噪声
- 2、椒盐噪声
- 3、泊松噪声
- 4、speckle噪声
这篇文章主要介绍如何利用opencv来对图像添加各类噪声,原图:
文章图片
1、高斯噪声 高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差(sigma)的大小来控制添加噪声程度,
sigma
越大添加的噪声越多图片损坏的越厉害#读取图片img = cv2.imread("demo.png")#设置高斯分布的均值和方差mean = 0#设置高斯分布的标准差sigma = 25#根据均值和标准差生成符合高斯分布的噪声gauss = np.random.normal(mean,sigma,(img_height,img_width,img_channels))#给图片添加高斯噪声noisy_img = image + gauss#设置图片添加高斯噪声之后的像素值的范围noisy_img = np.clip(noisy_img,a_min=0,a_max=255)#保存图片cv2.imwrite("noisy_img.png",noise_img)
文章图片
2、椒盐噪声 椒盐噪声就是给图片添加黑白噪点,椒指的是黑色的噪点(0,0,0)盐指的是白色的噪点(255,255,255),通过设置
amount
来控制添加噪声的比例,值越大添加的噪声越多,图像损坏的更加严重#读取图片img = cv2.imread("demo.png")#设置添加椒盐噪声的数目比例s_vs_p = 0.5#设置添加噪声图像像素的数目amount = 0.04noisy_img = np.copy(image)#添加salt噪声num_salt = np.ceil(amount * image.size * s_vs_p)#设置添加噪声的坐标位置coords = [np.random.randint(0,i - 1, int(num_salt)) for i in image.shape]noisy_img[coords] = 255#添加pepper噪声num_pepper = np.ceil(amount * image.size * (1. - s_vs_p))#设置添加噪声的坐标位置coords = [np.random.randint(0,i - 1, int(num_pepper)) for i in image.shape]noisy_img[coords] = 0#保存图片cv2.imwrite("noisy_img.png",noise_img)
文章图片
3、泊松噪声
#读取图片img = cv2.imread("demo.png")#计算图像像素的分布范围vals = len(np.unique(image))vals = 2 ** np.ceil(np.log2(vals))#给图片添加泊松噪声noisy_img = np.random.poisson(image * vals) / float(vals)#保存图片cv2.imwrite("noisy_img.png",noise_img)
文章图片
4、speckle噪声
#读取图片img = cv2.imread("demo.png")#随机生成一个服从分布的噪声gauss = np.random.randn(img_height,img_width,img_channels)#给图片添加speckle噪声noisy_img = image + image * gauss#归一化图像的像素值noisy_img = np.clip(noisy_img,a_min=0,a_max=255)#保存图片cv2.imwrite("noisy_img.png",noise_img)
文章图片
到此这篇关于python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)的文章就介绍到这了,更多相关python使用opencv内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python链表的基础概念和基础用法详解
- Tkinter|Tkinter 组件Scrollbar的具体使用
- Android 使用Zxing报错(Channel is unrecoverably broken and will be disposed!)
- ADB使用WIFI连接Android设备
- 使用kubeadm快速启用一个集群
- 使用|使用 HDFS 协议访问对象存储服务
- appium 自动化问题三--键盘关键字的使用
- android中LayoutInflater的3种使用以及getSystemService的API
- uniapp APP下使用list组件的下拉刷新和触底加载
- Rails脚本工具使用介绍