python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
作者:修炼之路 时间:2022-01-27 13:05:08
导读:
这篇文章主要介绍如何利用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.04
noisy_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)
来源:https://blog.csdn.net/sinat_29957455/article/details/123977298
标签:python,opencv,图像,添加,噪声


猜你喜欢
python 处理telnet返回的More,以及get想要的那个参数方法
2023-02-09 11:32:14
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2021-04-26 22:34:55

python代码实现烟花实例
2022-09-13 18:09:18

python利用JMeter测试Tornado的多线程
2022-10-15 12:03:26

vscode ssh远程连接服务器的思考浅析
2023-06-05 07:12:05
python中sub-pub机制实现Redis的订阅与发布
2023-08-22 09:34:41
Go项目编写Makefile规则文件概述
2024-02-06 01:20:07
MySQL存储引擎简介及MyISAM和InnoDB的区别
2024-01-26 23:53:17

什么是Python中的顺序表
2021-07-12 22:17:47

基于TensorBoard中graph模块图结构分析
2021-01-11 16:58:52

纯JS实现动态时间显示代码
2024-05-02 17:31:34
asp统计在线人数是实时的吗?
2010-07-14 21:07:00
Navicat连接mysql报错2003(10060)的解决方法
2024-01-25 06:08:14

视觉设计的一致性与用户体验
2010-01-06 13:38:00

SQL分页查询方式汇总
2024-01-24 00:33:29
利用python实现万年历的查询
2023-02-24 03:16:01

利用python写api接口实战指南
2021-03-29 06:07:18

JavaScript使用canvas实现flappy bird全流程详解
2024-04-18 09:34:49

GO语言中接口和接口型函数的具体使用
2023-06-18 09:08:40
Python 获取新浪微博的最新公共微博实例分享
2021-03-01 13:23:18