利用OpenCV给彩色图像添加椒盐噪声的方法

目录
  • 一、图像噪声
  • 二、椒盐噪声
  • 三、C++代码
  • 四、结果展示
    • 1、原图
    • 2、添加椒盐噪声
  • 五、python代码
  • 六、结果展示
    • 1、原图
    • 2、添加椒盐噪声
  • 七、总结

一、图像噪声

图像噪声是图像在获取或者传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号。很多时候将图像看作随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布函数和概率密度分布函数。图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受到噪声污染。

二、椒盐噪声

椒盐噪声是数字图像中的常见噪声,一般是图像传感器、传输信道及解码处理等产生的黑白相间的亮暗点噪声,椒盐噪声常由图像切割产生。椒盐噪声是指两种噪声:盐噪声和椒噪声。盐噪声一般是白色噪声,椒噪声一般为黑色噪声。前者属于高灰度噪声,或者属于低灰度噪声,一般两种噪声同时出现,呈现黑白杂点。去除椒盐噪声常用的方法是中值滤波。

三、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、添加椒盐噪声

七、总结

到此这篇关于利用OpenCV给彩色图像添加椒盐噪声的文章就介绍到这了,更多相关OpenCV彩色图像添加椒盐噪声内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用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.

  • 利用OpenCV给彩色图像添加椒盐噪声的方法

    目录 一.图像噪声 二.椒盐噪声 三.C++代码 四.结果展示 1.原图 2.添加椒盐噪声 五.python代码 六.结果展示 1.原图 2.添加椒盐噪声 七.总结 一.图像噪声 图像噪声是图像在获取或者传输过程中受到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像看作随机过程,因而描述噪声的方法完全可以借用随机过程的描述,即使用其概率分布函数和概率密度分布函数.图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道受

  • Python实现图像随机添加椒盐噪声和高斯噪声

    目录 1.常见的图像噪声 (1)高斯噪声 (2) 椒盐噪声 2.生成图像噪声 (1)高斯噪声 (2) 椒盐噪声(速度慢) (3) 椒盐噪声(快速版) 3. Demo性能测试 图像噪声是指存在于图像数据中的不必要的或多余的干扰信息.在噪声的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量图像噪声.通俗的讲就是信号占多少,噪声占多少,SNR越小,噪声占比越大. 1.常见的图像噪声 (1)高斯噪声 高斯噪声Gaussian noise,是指它的概率密度函数服从高斯分布(即正态

  • 在python中利用opencv简单做图片比对的方法

    下面代码中利用了两种比对的方法,一 对图片矩阵(m x m)求解特征值,通过比较特征值是否在一定的范围内,判断图片是否相同.二 对图片矩阵(m x m)中1求和,通过比较sum和来比较图片. # -*- coding: utf-8 -*- import cv2 as cv import numpy as np import os file_dir_a='C:\Users\wt\Desktop\data\image1\\' file_dir_b='C:\Users\wt\Desktop\data\

  • python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)

    目录 1.高斯噪声 2.椒盐噪声 3.泊松噪声 4.speckle噪声 导读: 这篇文章主要介绍如何利用opencv来对图像添加各类噪声,原图: 1.高斯噪声 高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差(sigma)的大小来控制添加噪声程度,sigma越大添加的噪声越多图片损坏的越厉害 #读取图片 img = cv2.imread("demo.png") #设置高斯分布的均值和方差 mean = 0 #设置高斯分布的标准差 sigma = 25 #根据均值

  • 如何利用python正确地为图像添加高斯噪声

    目录 彩图or灰度图 uint8orfloat64 方差or标准差 是否截断(clip) 总结 参考 开门见山,直接使用 skimage 库为图像添加高斯噪声是很简单的: import skimage origin = skimage.io.imread("./lena.png") noisy = skimage.util.random_noise(origin, mode='gaussian', var=0.01) 但是如果不用库函数而自己实现的话,有几个问题是值得注意的. 彩图 o

  • Python实现对图像添加高斯噪声或椒盐噪声

    目录 内容简介 加噪声的代码(高斯噪声,椒盐噪声) 在pytorch中如何使用 内容简介 展示如何给图像叠加不同等级的椒盐噪声和高斯噪声的代码,相应的叠加噪声的已编为对应的类,可实例化使用.以下主要展示自己编写的: 加噪声的代码(高斯噪声,椒盐噪声) add_noise.py #代码中的noisef为信号等级,例如我需要0.7的噪声,传入参数我传入的是1-0.7 from PIL import Image import numpy as np import random import torch

  • 利用python3如何给数据添加高斯噪声

    目录 Background 原始数据 源码 总结 Background 高斯噪声,顾名思义是指服从高斯分布(正态分布)的一类噪声.有的时候我们需要向标准数据中加入合适的高斯噪声让数据更加符合实际. python中的random库中集成了高斯正态分布,可以直接使用. 我们可以通过调整高斯噪声均值和方差,获取不同效果的处理数据. 原始数据 高斯噪声sigma = 0.05 高斯噪声sigma = 0.1 高斯噪声sigma = 0.15 源码 import random import numpy a

  • Python 利用OpenCV给照片换底色的示例代码

    OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法.相比于PIL库来说OpenCV更加强大, 可以做更多更复杂的应用,比如人脸识别等. 1. 读入并显示图片 im

  • 利用Opencv中Houghline方法实现直线检测

    利用Opencv中的Houghline方法进行直线检测-python语言 这是给Python部落翻译的文章,请在这里看原文. 在图像处理中,霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲. 下面我们将看到利用HoughLine算法来阐述霍夫变化进行直线检测的原理,把此算法应用到特点图像的边缘检测是可取的.边缘检测方法请参考这篇文章–边缘检测. Houghline算法基础 直线可以表示为y=mx+c,或者以极坐标形式表示为r=xcosθ+ysinθ,其中r是原点到直线

随机推荐