python添加高斯噪声_使用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

参考链接:

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 显示图片,图片分类

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 ...

Python+Opencv实现把图片转为视频

1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

随机推荐

轻量linux-Crunch bang

主页地址:http://crunchbang.org crunch bang11昵称 wheezy crunchbang 11 基于 debian7

php ajax提交post请求出现数组被截断情况的解决方法

一.场景 今天做保存专题商品列表的时候发现,前端明明有2300多条数据,但是实际服务端接受存入数据库才166条 二.解决过程 经过调试发现前端页面提交post请求时数据量是正确的,但到服务端只能接受到 ...

SSH小结

工作有一段时间了,经常用SSH登录远程机器,但对原理一直不是很了解,所以查阅了一些资料,写个小结. 一. SSH是什么? SSH的全称是Secure Shell, 是一种"用来在不安全的网络 ...

boost::pool 库速记

使用示例 #include #include #include #inc ...

javascrip实现:若选中TreeView的父节点checkbox,则其子节点全部选中;子节点全部没选中,则父节点也会没选中。

java学习过程中遇到的坑及解决方法

1. Table 'my_data_base.gjp_zhangwu' doesn't exist Query: select * from gjp_zhangwu Parameters: 数据库中的 ...

vSphere 软件组件

vSphere 包括以下软件组件: ESXi 一种虚拟化平台,您可使用此平台将虚拟机创建为一组配置和磁盘文件,它们可共同执行物理机的所有功能. 通过 ESXi,可以运行虚拟机,安装操作系统,运行应用程 ...

微信小程序——页面之间传递值

小程序页面传值的方式: 1.正向传值:上一页面 -->  下一页面 url传值 本地储存 全局的app对象 2.反向传值:下一页面 -->  上一页面 本地储存 全局的app对象 先说一下 ...

转载:RESTful API 设计指南

http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板. ...

你可能感兴趣的:(python添加高斯噪声)