利用OpenCV给彩色 图像添加椒盐噪声的方法
作者:点云侠 发布时间:2023-06-15 00:11:30
标签:opencv,椒盐噪声,图像
一、图像噪声
图像噪声是图像在获取或者传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。很多时候将图像看作随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布函数和概率密度分布函数。图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到噪声污染。
二、椒盐噪声
椒盐噪声是数字图像中的常见噪声,一般是图像传感器、传输信道及解码处理等产生的黑白相间的亮暗点噪声,椒盐噪声常由图像切割产生。椒盐噪声是指两种噪声:盐噪声和椒噪声。盐噪声一般是白色噪声,椒噪声一般为黑色噪声。前者属于高灰度噪声,或者属于低灰度噪声,一般两种噪声同时出现,呈现黑白杂点。去除椒盐噪声常用的方法是中值滤波。
三、C++代码
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//-----------------------------------椒盐噪声函数----------------------------------------------
void saltAndPepper(cv::Mat image, int n)
{
for (int k = 0; k < n / 2; k++)
{
// 随机确定图像中添加椒盐噪声的位置
int i, j;
i = std::rand() % image.cols; // 取余数运算,保证在图像的列数内
j = std::rand() % image.rows; // 取余数运算,保证在图像的行数内
int write_black = std::rand() % 2; // 判定为白色噪声还是黑色噪声的变量
// 添加白色噪声
if (write_black == 0)
{
image.at<cv::Vec3b>(j, i)[0] = 255; //cv::Vec3b为opencv定义的一个3个值的向量类型
image.at<cv::Vec3b>(j, i)[1] = 255; //[]指定通道,B:0,G:1,R:2
image.at<cv::Vec3b>(j, i)[2] = 255;
}
// 添加黑色噪声
else
{
image.at<cv::Vec3b>(j, i)[0] = 0; //cv::Vec3b为opencv定义的一个3个值的向量类型
image.at<cv::Vec3b>(j, i)[1] = 0; //[]指定通道,B:0,G:1,R:2
image.at<cv::Vec3b>(j, i)[2] = 0;
}
}
}
int main()
{
Mat lena = imread("qq.jpg");
if (lena.empty())
{
cout << "请确认图像文件名称是否正确" << endl;
return -1;
}
imshow("原图", lena);
saltAndPepper(lena, 10000); // 彩色图像添加椒盐噪声
imshow("添加噪声", lena);
waitKey(0);
return 0;
}
四、结果展示
1、原图
2、添加椒盐噪声
五、python代码
import numpy as np
import cv2
def salt_pepper_noise(image, prob):
"""
添加椒盐噪声
:param image: 输入图像
:param prob: 噪声比
:return: 带有椒盐噪声的图像
"""
salt = np.zeros(image.shape, np.uint8)
thres = 1 - prob
for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = np.random.rand()
if rdn < prob:
salt[i][j] = 0
elif rdn > thres:
salt[i][j] = 255
else:
salt[i][j] = image[i][j]
return salt
src = cv2.imread('qq.jpg')
cv2.namedWindow('input_image', cv2.WINDOW_AUTOSIZE)
cv2.imshow('input_image', src)
tar = salt_pepper_noise(src, 0.01)
cv2.imshow('noise', tar)
cv2.waitKey(0)
cv2.destroyAllWindows()
六、结果展示
1、原图
2、添加椒盐噪声
来源:https://blog.csdn.net/qq_36686437/article/details/120591384


猜你喜欢
- 1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) sel
- 本文研究的主要是python可视化包Bokeh的相关内容,具体如下。问题:需要把pandas的数据绘图并通过网页显示,matplotlib需
- SOCKET编程socket(套接字):是一个网络通信的端点,能实现不同主机的进程通信, -通过IP+端口定位对方并发送消息的通信机制分为U
- 图表是比干巴巴的表格更直观的表达,简洁、有力。工作中经常遇到的场景是,有一些数值需要定时的监控,比如服务器的连接数、活跃用户数、点击某个按钮
- 基础环境# +++++ 阿里云OSS开发指南里都有详细的步骤,在这里整理了一下自己需要的东西# 确定开发环境,centOS默认安装了pyth
- 本文实例讲述了PHP实现的随机IP函数。分享给大家供大家参考,具体如下:function get_rand_ip(){ $arr
- 1、PyInstaller简介PyInstaller是一个跨平台的Python应用打包工具,支持 Windows/Linux/MacOS三大
- 如下所示: static void Main()&nbs
- 一、property() 函数讲解了解 @property 装饰器之前,我们首先要了解内置函数的 property()。class prop
- 本文实例讲述了django框架使用模板。分享给大家供大家参考,具体如下:models.py:from django.db import mo
- 计划来实现一个便签墙系列,这个东西做简单也简单,往复杂了做功能也很多,记录一下从零到有的开发过程吧,希望最后能把这个项目做得很完善。首先是前
- 大家知道,Microsoft为了更好地预防恶意用户和攻击者的攻击,在默认情况下,没有将 IIS6.0 安装到 Windows Server
- 本文实例讲述了JS模拟简易滚动条效果的方法。分享给大家供大家参考,具体如下:使用Js模拟滚动条。简易模式,类似手机上常见的滚动条。效果如下:
- 本文是小编日常收集整理些js经典实例,特此分享供大家参考!跨浏览器添加事件//跨浏览器添加事件function addEvent(obj,t
- 一.概述IO 内存是sql server最重要的资源,数据从磁盘加载到内存,再从内存中缓存,输出到应用端,在sql server 内存初探中
- PyCharm 具备一般 IDE 的功能,比如,调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试、版本控制…另外,PyCha
- 1.引言本文是Python生态系统中一些有用技巧的分享。大多数技巧只是使用标准库中的包,但其他一些技巧会涉及一些第三方包。在开始阅读本文内容
- 第一步:获取mysql YUM源进入mysql官网获取RPM包下载地址https://dev.mysql.com/downloads/rep
- 这个效果本身难度不大,主要在程序结构和扩展中下了些功夫,务求用起来更方便,能用在更多的地方。程序特点 1,同一个提示框用在多个触发元素时,只
- python3.6.4安装opencv3.4.2使用pip安装OpenCV直接安装最新版:pip3 install opencv_pytho