使用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中用于计算指数的exp()方法
May 14 Python
Python多线程下载文件的方法
Jul 10 Python
python先序遍历二叉树问题
Nov 10 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
django manage.py扩展自定义命令方法
May 27 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
python 内置模块详解
Jan 01 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
python 实现的截屏工具
May 08 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/01/23 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
2014/12/15 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
将python图片转为二进制文本的实例
2019/01/24 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python制作图片缩略图
2019/04/30 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
如何使用python代码操作git代码
2020/02/29 Python
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
高中政治教学反思
2014/01/18 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
投标保密承诺书
2014/05/19 职场文书
运动会广播稿100字
2014/09/14 职场文书
学习保证书
2015/01/17 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
银行实习推荐信
2015/03/27 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
如何用PHP实现多线程编程
2021/05/26 PHP
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
如何优化vue打包文件过大
2022/04/13 Vue.js