使用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学习笔记之os模块使用总结
Nov 03 Python
python函数的5种参数详解
Feb 24 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python 直接赋值和copy的区别详解
Aug 07 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
python实现扫雷小游戏
Apr 24 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Opencv中cv2.floodFill算法的使用
Jun 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
php获取根域名方法汇总
2014/10/28 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
PHP substr()函数参数解释及用法讲解
2017/11/23 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
vue-cli的eslint相关用法
2017/09/29 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
python开发一款翻译工具
2020/10/10 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
JPA的特点
2014/10/25 面试题
网上快餐厅创业计划书
2014/02/01 职场文书
九年级政治教学反思
2014/02/06 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers