使用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中的多进程
Nov 06 Python
Python和C/C++交互的几种方法总结
May 11 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
python实现批量按比例缩放图片效果
Mar 30 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
Win下PyInstaller 安装和使用教程
Dec 25 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python中time、datetime模块的使用
Dec 14 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
ASP.NET Core中的配置详解
Feb 05 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
JavaScript中的函数重载深入理解
2014/08/04 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Vue仿今日头条实例详解
2018/02/06 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
vuex进阶知识点巩固
2018/05/20 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
Python中for循环详解
2014/01/17 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python编程实现正则删除命令功能
2017/08/30 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
python中adb有什么功能
2020/06/07 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
工厂门卫的岗位职责
2014/07/27 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技