使用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中self原理实例分析
Apr 30 Python
视觉直观感受若干常用排序算法
Apr 13 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
Python基于WordCloud制作词云图
Nov 29 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
selenium自动化测试入门实战
Dec 21 Python
Python+Selenium自动化环境搭建与操作基础详解
Mar 13 Python
Python实现为PDF去除水印的示例代码
Apr 03 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
phpBB BBcode处理的漏洞
2006/10/09 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
drupal 代码实现URL重写
2011/05/04 PHP
php 函数中使用static的说明
2012/06/01 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
大四优秀党员个人民主评议
2014/09/19 职场文书
在职员工证明书
2014/09/19 职场文书
社会实践活动报告
2015/02/05 职场文书
学生安全责任协议书
2016/03/22 职场文书