使用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 相关文章推荐
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
python 拼接文件路径的方法
Oct 23 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
对python中Json与object转化的方法详解
Dec 31 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
python SocketServer源码深入解读
Sep 17 Python
python实现的多任务版udp聊天器功能案例
Nov 13 Python
python3实现弹弹球小游戏
Nov 25 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
python 模拟登陆163邮箱
Dec 15 Python
如何用Django处理gzip数据流
Jan 29 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项目开发中最常用的自定义函数整理
2010/12/02 PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
2013/10/24 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
2014/04/17 Javascript
js实现背景图片感应鼠标变化的方法
2015/02/28 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
教师的实习鉴定
2013/12/15 职场文书
给面试官的感谢信
2014/02/01 职场文书
动物科学专业求职信
2014/07/27 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
基层党支部整改方案
2014/10/25 职场文书
法律意见书范本
2015/06/04 职场文书