使用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使用urllib2获取网络资源实例讲解
Dec 02 Python
让 python 命令行也可以自动补全
Nov 30 Python
python制作花瓣网美女图片爬虫
Oct 28 Python
视觉直观感受若干常用排序算法
Apr 13 Python
Python实现简单过滤文本段的方法
May 24 Python
python opencv 图像尺寸变换方法
Apr 02 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
May 31 Python
python批量处理txt文件的实例代码
Jan 13 Python
Django 5种类型Session使用方法解析
Apr 29 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
JavaScript中Math对象使用说明
2008/01/16 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
Ionic快速安装教程
2016/06/03 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
js初始化验证实例详解
2016/11/26 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
简单介绍Python中的floor()方法
2015/05/15 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python字典快速保存于读取的方法
2018/03/23 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
法学专业个人求职信
2013/09/26 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书