使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)
在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
参考链接:
2、https://stackoverflow.com/questions/14435632/impulse-gaussian-and-salt-and-pepper-noise-with-opencv#
使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)的更多相关文章
- python opencv show图片,debug技巧
debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...
- Python + opencv 实现图片文字的分割
实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...
- opencv给图片添加文字水印<转>
其中有一些改动为了文字大小等还有一些图片的尺寸,真正使用的时候可以把尺寸的屏蔽掉 头文件: //==================================================== ...
- python opencv 读取图片 返回图片某像素点的b,g,r值
转载:https://blog.csdn.net/weixin_41799483/article/details/80884682 #coding=utf-8 #读取图片 返回图片某像素点的b,g ...
- Python opencv resize图片并保存原有的图像比例
参考链接:https://www.jianshu.com/p/3092835eab61 现有的图像是高瘦高瘦的,所以直接resize成矩形不合适.改变了整个结构. 所以采用的是先resize再padd ...
- Python OpenCV 显示图片,图片分类
def divide_image(path,g_path1,g_path0): img_lst = os.listdir(path) for i in img_lst: print('类别1,类别0' ...
- 用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)
图像画面中的噪声,大致可以分为两类:高斯噪声和椒盐噪声.在这里,我们先看下图像中两种噪声各自的特征. 椒盐噪声:噪声幅值基本相同,但出现位置随机. 高斯噪声:图像中每一点都存在噪声,但幅值是随机分布的 ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- 【转】Windows下使用VS2008编译OpenCV 2.1 添加Intel TBB和Python支持
Windows下使用VS2008编译OpenCV2.1 添加Intel TBB和Python支持 步骤: 1.仔细阅读OpenCV官网上的InstallGuide:http://opencv.will ...
随机推荐
- 解析Xml文件的三种方式
1.Sax解析(simple api for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用回调函数来实现. clas ...
- 51nod1282(最小表示法&&枚举)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1282 题意:中文题目诶- 思路:指针不可转,刻盘可转,显然,对 ...
- 洛谷P3172 [CQOI2015]选数(容斥)
传送门 首先,进行如下处理 如果$L$是$K$的倍数,那么让它变成$\frac{L}{K}$,否则变成$\frac{L}{K}+1$ 把$H$变成$\frac{H}{K}$ 那么,现在的问题就变成了在 ...
- css正方形盒子 自适应
<!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- jdk及tomcat的安装
Tomcat和JDK安装指南 1 JDK的安装 要运行JAVA程序,必须安装JDK(JAVA 开发包)的支持. 1.1 安装 1.J2SDK的安装比较简单,在安装盘目录下寻找“JDK安装程序”文件 ...
- JDK12下的ArrayList源码解读 与 Vector的对比
ArrayList源码阅读. //测试代码实现如下 private static void arrayList() { ArrayList<String> list = new Array ...
- CF 1215解题报告
T1 偶数输出n/2 奇数输出(n-1)/2即可 T2 判断是不是回文 不是直接输出子串 是回文继续判断 如果他前(len+1)/2内没有相同 输出-1 其他的 交换不同字符,输出子串 T3 贪心+二 ...
- 黑马MyBatis入门day1
package com.itheima.domain; /* CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username ...
- shell 经典
使用新写法 这里的新写法不是指有多厉害,而是指我们可能更希望使用较新引入的一些语法,更多是偏向代码风格的,比如 尽量使用func(){}来定义函数,而不是func{} 尽量使用[[]]来代替[] 尽量 ...
- kali linux安装搜狗输入法
1. 更新软件源 vi /etc/apt/sources.list 2. 安装fcitx apt-get install fcitx 3. 下载deb包到指定目录, dpkg -i sogou**** ...