在matlab中,存在执行直接得函数来添加高斯噪声和椒盐噪声。Python-OpenCV中虽然不存在直接得函数,但是很容易使用相关的函数来实现。

代码:

  1. import numpy as np
  2. import random
  3. import cv2
  4.  
  5. def sp_noise(image,prob):
  6. '''
  7. 添加椒盐噪声
  8. prob:噪声比例
  9. '''
  10. output = np.zeros(image.shape,np.uint8)
  11. thres = 1 - prob
  12. for i in range(image.shape[0]):
  13. for j in range(image.shape[1]):
  14. rdn = random.random()
  15. if rdn < prob:
  16. output[i][j] = 0
  17. elif rdn > thres:
  18. output[i][j] = 255
  19. else:
  20. output[i][j] = image[i][j]
  21. return output
  22.  
  23. def gasuss_noise(image, mean=0, var=0.001):
  24. '''
  25. 添加高斯噪声
  26. mean : 均值
  27. var : 方差
  28. '''
  29. image = np.array(image/255, dtype=float)
  30. noise = np.random.normal(mean, var ** 0.5, image.shape)
  31. out = image + noise
  32. if out.min() < 0:
  33. low_clip = -1.
  34. else:
  35. low_clip = 0.
  36. out = np.clip(out, low_clip, 1.0)
  37. out = np.uint8(out*255)
  38. #cv.imshow("gasuss", out)
  39. return out

可见,只要我们得到满足某个分布的多维数组,就能作为噪声添加到图片中。

例如:

  1. import cv2
  2. import numpy as np
  3.  
  4. >>> im = np.empty((5,5), np.uint8) # needs preallocated input image
  5. >>> im
  6. array([[248, 168, 58, 2, 1], # uninitialized memory counts as random, too ? fun ;)
  7. [ 0, 100, 2, 0, 101],
  8. [ 0, 0, 106, 2, 0],
  9. [131, 2, 0, 90, 3],
  10. [ 0, 100, 1, 0, 83]], dtype=uint8)
  11. >>> im = np.zeros((5,5), np.uint8) # seriously now.
  12. >>> im
  13. array([[0, 0, 0, 0, 0],
  14. [0, 0, 0, 0, 0],
  15. [0, 0, 0, 0, 0],
  16. [0, 0, 0, 0, 0],
  17. [0, 0, 0, 0, 0]], dtype=uint8)
  18. >>> cv2.randn(im,(0),(99)) # normal
  19. array([[ 0, 76, 0, 129, 0],
  20. [ 0, 0, 0, 188, 27],
  21. [ 0, 152, 0, 0, 0],
  22. [ 0, 0, 134, 79, 0],
  23. [ 0, 181, 36, 128, 0]], dtype=uint8)
  24. >>> cv2.randu(im,(0),(99)) # uniform
  25. array([[19, 53, 2, 86, 82],
  26. [86, 73, 40, 64, 78],
  27. [34, 20, 62, 80, 7],
  28. [24, 92, 37, 60, 72],
  29. [40, 12, 27, 33, 18]], dtype=uint8)

然后再:

  1. img = ...
  2. noise = ...
  3.  
  4. 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-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)的更多相关文章

  1. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

  2. Python + opencv 实现图片文字的分割

    实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...

  3. opencv给图片添加文字水印<转>

    其中有一些改动为了文字大小等还有一些图片的尺寸,真正使用的时候可以把尺寸的屏蔽掉 头文件: //==================================================== ...

  4. python opencv 读取图片 返回图片某像素点的b,g,r值

    转载:https://blog.csdn.net/weixin_41799483/article/details/80884682 #coding=utf-8   #读取图片 返回图片某像素点的b,g ...

  5. Python opencv resize图片并保存原有的图像比例

    参考链接:https://www.jianshu.com/p/3092835eab61 现有的图像是高瘦高瘦的,所以直接resize成矩形不合适.改变了整个结构. 所以采用的是先resize再padd ...

  6. Python OpenCV 显示图片,图片分类

    def divide_image(path,g_path1,g_path0): img_lst = os.listdir(path) for i in img_lst: print('类别1,类别0' ...

  7. 用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)

    图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声.在这里,我们先看下图像中两种噪声各自的特征. 椒盐噪声:噪声幅值基本相同,但出现位置随机. 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的 ...

  8. 用 Python 和 OpenCV 检测图片上的条形码

      用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...

  9. 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持

    Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...

随机推荐

  1. 解析Xml文件的三种方式

    1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用回调函数来实现. clas ...

  2. 51nod1282(最小表示法&&枚举)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1282 题意:中文题目诶- 思路:指针不可转,刻盘可转,显然,对 ...

  3. 洛谷P3172 [CQOI2015]选数(容斥)

    传送门 首先,进行如下处理 如果$L$是$K$的倍数,那么让它变成$\frac{L}{K}$,否则变成$\frac{L}{K}+1$ 把$H$变成$\frac{H}{K}$ 那么,现在的问题就变成了在 ...

  4. css正方形盒子 自适应

      <!DOCTYPE html>   <html lang="en">   <head>   <meta charset="U ...

  5. jdk及tomcat的安装

    Tomcat和JDK安装指南 1  JDK的安装 要运行JAVA程序,必须安装JDK(JAVA 开发包)的支持. 1.1  安装 1.J2SDK的安装比较简单,在安装盘目录下寻找“JDK安装程序”文件 ...

  6. JDK12下的ArrayList源码解读 与 Vector的对比

    ArrayList源码阅读. //测试代码实现如下 private static void arrayList() { ArrayList<String> list = new Array ...

  7. CF 1215解题报告

    T1 偶数输出n/2 奇数输出(n-1)/2即可 T2 判断是不是回文 不是直接输出子串 是回文继续判断 如果他前(len+1)/2内没有相同 输出-1 其他的 交换不同字符,输出子串 T3 贪心+二 ...

  8. 黑马MyBatis入门day1

    package com.itheima.domain; /* CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username ...

  9. shell 经典

    使用新写法 这里的新写法不是指有多厉害,而是指我们可能更希望使用较新引入的一些语法,更多是偏向代码风格的,比如 尽量使用func(){}来定义函数,而不是func{} 尽量使用[[]]来代替[] 尽量 ...

  10. kali linux安装搜狗输入法

    1. 更新软件源 vi /etc/apt/sources.list 2. 安装fcitx apt-get install fcitx 3. 下载deb包到指定目录, dpkg -i sogou**** ...