使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)


Posted in Python onMay 28, 2019

在matlab中,存在执行直接得函数来添加高斯噪声和椒盐噪声。Python-OpenCV中虽然不存在直接得函数,但是很容易使用相关的函数来实现。

代码:

import numpy as np
import random
import cv2

def sp_noise(image,prob):
  '''
  添加椒盐噪声
  prob:噪声比例 
  '''
  output = np.zeros(image.shape,np.uint8)
  thres = 1 - prob 
  for i in range(image.shape[0]):
    for j in range(image.shape[1]):
      rdn = random.random()
      if rdn < prob:
        output[i][j] = 0
      elif rdn > thres:
        output[i][j] = 255
      else:
        output[i][j] = image[i][j]
  return output


def gasuss_noise(image, mean=0, var=0.001):
  ''' 
    添加高斯噪声
    mean : 均值 
    var : 方差
  '''
  image = np.array(image/255, dtype=float)
  noise = np.random.normal(mean, var ** 0.5, image.shape)
  out = image + noise
  if out.min() < 0:
    low_clip = -1.
  else:
    low_clip = 0.
  out = np.clip(out, low_clip, 1.0)
  out = np.uint8(out*255)
  #cv.imshow("gasuss", out)
  return out

可见,只要我们得到满足某个分布的多维数组,就能作为噪声添加到图片中。

例如:

import cv2
import numpy as np

>>> im = np.empty((5,5), np.uint8) # needs preallocated input image
>>> im
array([[248, 168, 58,  2,  1], # uninitialized memory counts as random, too ? fun ;) 
    [ 0, 100,  2,  0, 101],
    [ 0,  0, 106,  2,  0],
    [131,  2,  0, 90,  3],
    [ 0, 100,  1,  0, 83]], dtype=uint8)
>>> im = np.zeros((5,5), np.uint8) # seriously now.
>>> im
array([[0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0]], dtype=uint8)
>>> cv2.randn(im,(0),(99))     # normal
array([[ 0, 76,  0, 129,  0],
    [ 0,  0,  0, 188, 27],
    [ 0, 152,  0,  0,  0],
    [ 0,  0, 134, 79,  0],
    [ 0, 181, 36, 128,  0]], dtype=uint8)
>>> cv2.randu(im,(0),(99))     # uniform
array([[19, 53, 2, 86, 82],
    [86, 73, 40, 64, 78],
    [34, 20, 62, 80, 7],
    [24, 92, 37, 60, 72],
    [40, 12, 27, 33, 18]], dtype=uint8)

然后再:

img = ...
noise = ...

image = img + noise

参考链接:

1、https://stackoverflow.com/questions/22937589/how-to-add-noise-gaussian-salt-and-pepper-etc-to-image-in-python-with-opencv#

2、https://stackoverflow.com/questions/14435632/impulse-gaussian-and-salt-and-pepper-noise-with-opencv#

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 爬虫学习笔记之多线程爬虫
Sep 21 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
python如何基于redis实现ip代理池
Jan 17 Python
基于Python的Jenkins的二次开发操作
May 12 Python
django模板获取list中指定索引的值方式
May 14 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
python def 定义函数,调用函数方式
Jun 02 Python
Python包资源下载路径报404解决方案
Nov 05 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
Python学习笔记之变量、自定义函数用法示例
May 28 #Python
Python分布式进程中你会遇到的问题解析
May 28 #Python
Python增强赋值和共享引用注意事项小结
May 28 #Python
Django框架用户注销功能实现方法分析
May 28 #Python
Django框架首页和登录页分离操作示例
May 28 #Python
Django框架封装外部函数示例
May 28 #Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
May 27 #Python
You might like
php批量上传的实现代码
2013/06/09 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
分享php邮件管理器源码
2016/01/06 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
javascript 函数速查表
2010/02/07 Javascript
firefox下input type=&quot;file&quot;的size是多大
2011/10/24 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
python妙用之编码的转换详解
2017/04/21 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
python之array赋值技巧分享
2019/11/28 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
门诊挂号室室长岗位职责
2013/11/27 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
营销与策划专业求职信
2014/06/20 职场文书
小学教育见习报告
2014/10/31 职场文书
先进党支部申报材料
2014/12/24 职场文书
公务员个人年终总结
2015/02/12 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
十七岁的单车观后感
2015/06/12 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js