给一幅图像添加椒盐噪声

2015-06-05

知识点:

(1)像素值的存储

(2)引用的参数传递方式

(3)单通道和三通道图像像素访问的区别

代码如下:

 1 #include "highgui.h"
 2 #include "cxcore.h"
 3 #include "cv.h"
 4 #include "cmath"
 5
 6 void salt(cv::Mat &, int );
 7
 8
 9 int main()
10 {
11     cv::Mat tp1 = cv::imread("1.bmp");
12     salt (tp1, 3000);
13     cv::namedWindow("1");
14     cv::imshow("1",tp1);
15     cv::waitKey(0);
16     return 0;
17 }
18
19
20
21 void salt(cv::Mat &tp, int n)
22 {
23     for (int k=0; k < n; k++)
24     {
25         int i = rand() % tp.cols;
26         int j = rand() % tp.rows;
27
28         if(tp.channels() == 1)
29           tp.at <uchar>(j,i) = 255;//单通道像素赋值
30         else if (tp.channels() == 3)
31         {
32            tp.at <cv::Vec3b>(j,i)[0] = 255;//多通道像素赋值
33           tp.at <cv::Vec3b>(j,i)[1] = 255;
34            tp.at <cv::Vec3b>(j,i)[2] = 255;
35         }
36     }
37     return;
38 }

效果图:

主要代码解析:

(1)tp.at<uchar>(j,i) = 255;

类cv::Mat 有若干成员函数可以获取图像的属性。公有成员的变量cols和rows给出了图像的宽和高。成员函数at(int y, int x)可以用来存取图像的元素。但是必须在编译期知道图像的数据类型,因为cv::Mat 可以存放任意数据类型的元素。这也是这个函数用模板函数来实现的原因。这也意味着,当调用该函数时,你必须以如<uchar>来指定数据类型。

注:一定要确保指定的数据类型要和矩阵中的数据类型相符合。at方法本身不会进行任何数据类型转换。

(2)tp.at <cv::Vec3b>(j,i)[channel] = 255;

对于彩色图像,每个像素由三个部分构成(r,g,b三通道)。因此,一个包含彩色图像的cv::Mat 会返回一个由三个8位数组成的向量。opencv将此类向量定义为cv::Vec3b,即由三个unsigned char 组成的向量。索引值channel标明了颜色通道号。

(3)void salt(cv::Mat &tp, int n)
      第一个参数是一张输入图像,使用传引用的参数传递方式,可以在原图像上直接做修改,不用再新建一张空白图像。

椒盐噪声可以模仿雨雪天气,具体效果可以调节n(噪声点的个数)的大小。

时间: 2024-11-06 03:48:08

给一幅图像添加椒盐噪声的相关文章

如何正确地给图像添加高斯噪声

高斯噪声是一个均值为 0 方差为 \(\sigma_n^2\) 的正态分布,是一个加性噪声.但要正确地给图片添加高斯噪声,还要取决于程序中读入图片的数据格式. 如果图片的数据格式为 uint8,也即数据的范围为 [0, 255],那么直接生成对应方差的噪声,然后加到图片上去. # clean_image uint8 (128, 128) noise_image = clean_image + np.random.rand(128, 128) * sigma 此处 np.random.rand(1

【OpenCV】给图像添加噪声

图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,也就是使用随机过程的描述,也就是用它的高绿分布函数和概率密度分布函数.图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道收到了噪声的污染. 下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声. 1.椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种

图像处理---椒盐噪声(杂点效果)

转自:图像处理:椒盐噪声(杂点) Posted on 2008-10-28 16:07 parker 阅读(2794) 评论(0) 编辑 收藏 1.效果图:            2.实现原理:           在处理每一个像素点时,取得一个随机值与指定的杂点出现概率的值进行判断,以决定是否修改当前像素点的颜色值,如果需要修改,则设定一个随机的颜色值. 3.实现代码:  1        /// <summary> 2        /// 添加杂点 3         /// </

opencv中值滤波和低通滤波器对椒盐噪声处理的效果比较

opencv中值滤波和低通滤波器对椒盐噪声处理的效果比较 效果: 通过比较我们可以看出,中值滤波器有很好的保留了图像的边界信息 代码: void showimage(const std::string &str,const cv::Mat &image){ namedWindow(str,CV_WINDOW_AUTOSIZE); imshow(str,image); } Mat salt(const cv::Mat &image,int n){ Mat result = image

[Android] 给图像添加相框、圆形圆角显示图片、图像合成知识

    前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框.圆形圆角显示图片和图像合成的功能介绍.希望文章对大家有所帮助. 一. 打开图片和显示assets文件中图片 首先,对XML中activity_main.xml进行布局,通过使用RelativeLayout相对布局完成(XML代码后面附).然后,在Mainctivity.java中public class MainActivity e

椒盐噪声

椒盐噪声 图像噪声之椒盐噪声(Salt And Pepper Noise) 概述: 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单. 算法步骤: 我们使用信噪比(Signal NoiseRate)衡量图像噪声, 图象的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图象信噪比,即信号与噪声的方

OpenCV笔记(四)——两幅图像线性混合、改变图像的亮度和对比度

一.两幅图像线性混合 线性混合,就是g(x) = a*f1(x) + b*f2(x).其中g为输出,f1.f2为输入.a+b=1. 作用1:线性混合可以用于去噪,假设噪声的产生符合均值为零.标准差的独立分布.多个高斯分布求平均值,即可去除噪声. 作用2:用于两张图片的切换.a从大到小变化,b从小到大变化.g就渐渐从f1变到f2. OpenCV提供了addWeighted函数,完成上述功能: C++: void addWeighted(InputArray src1, double alpha,

matlab在空域与频域中去除周期噪声、椒盐噪声的简单应用

前言 去年图像处理的DLL,有学弟问我做的思路,便放到博客里 github地址,欢迎star 图像增强处理:设计一套空间域与频率域结合的图像增强算法,处理以下任一组图片中的带噪声图像,去除噪声,提高图像质量. (1)已知:噪声为随机噪声和周期噪声混合噪声: (2)要求: a)去噪处理后,计算均方误差评估去噪处理后图像的去噪效果 b)撰写完整的科技报告(形式类似科技论文)表述自己的算法设计,算法实现与算法评估过程. 对 swanNoise 图像去噪 空域去噪 根据老师讲解,swanNoise.bm

相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标

关键词:相机位姿估计,单目尺寸测量,环境探知 用途:基于相机的环境测量,SLAM,单目尺寸测量 文章类型:原理说明.Demo展示 @Author:VShawn @Date:2016-11-28 @Lab: [email protected] 目录 <相机位姿估计0:基本原理之如何解PNP问题> <相机位姿估计1:根据四个特征点估计相机姿态> <相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试> <相机位姿估计2:[应用]实时位姿估计与三维重建相