使用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的Tornado框架中的日志的方法
May 02 Python
python通过加号运算符操作列表的方法
Jul 28 Python
python列表的常用操作方法小结
May 21 Python
django中模板的html自动转意方法
May 27 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
TensorFlow打印输出tensor的值
Apr 19 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
对python For 循环的三种遍历方式解析
2019/02/01 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
十佳班主任事迹材料
2014/01/18 职场文书
授权委托书怎么写
2014/04/03 职场文书
公司授权委托书范文
2014/08/02 职场文书
党员民主生活会材料
2014/12/15 职场文书
通知书大全
2015/04/27 职场文书
毕业典礼致辞
2015/07/29 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫