OpenCV—图像椒盐噪声生成器
2015-10-24 11:11
459 查看
OpenCV—图像椒盐噪声生成器
椒盐噪声
椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0,加入椒盐噪声的图像如下图所示:原图
图像加入黑白椒盐噪声后
图像分通道加入椒盐噪声
添加椒盐噪声的函数
函数:
void salt(cv::Mat image, int n) void pepper(cv::Mat image, int n)
参数:
image — 输入图像(输出图像)灰度或彩色模式n — 噪点个数
//盐噪声 void salt(cv::Mat image, int n) { int i,j; for (int k=0; k<n/2; k++) { // rand() is the random number generator i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22 j = std::rand()%image.rows; if (image.type() == CV_8UC1) { // gray-level image image.at<uchar>(j,i)= 255; //at方法需要指定Mat变量返回值类型,如uchar等 } else if (image.type() == CV_8UC3) { // color image 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; } } } //椒噪声 void pepper(cv::Mat image, int n) { int i,j; for (int k=0; k<n; k++) { // rand() is the random number generator i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22 j = std::rand()%image.rows; if (image.type() == CV_8UC1) { // gray-level image image.at<uchar>(j,i)= 0; //at方法需要指定Mat变量返回值类型,如uchar等 } else if (image.type() == CV_8UC3) { // color image 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; } } }想要分通道加入椒盐噪声,只需要在image.at<cv::Vec3b>(j,i)[0]或[1]、[2]三个通道随机加入255或0即可。
转载请注明:iracer的CSDN博客 http://blog.csdn.net/iracer/article/details/49383491
相关文章推荐
- 定制自己的内核
- 内核配置与裁剪浅析
- centos 安装rpmforge、rpmfusion、epel软件仓库 ( a old article !!!!!! )
- linux日志文件
- Linux系统下设置静态IP或自动获取动态IP的简单方法
- Linux下的platform总线驱动
- Ubuntu 14.04 wubi 硬盘安装 ~ linux小白
- Openstack Murano(kilo)二次开发之添加Volume
- CentOS yum 源的配置与使用----rpmforge
- Docker的那些事(1)--什么是Docker和如何迁移
- Opencv + cuda 混编模式
- LinuxCNC+EtherCAT(3)翻译一篇东西KINS——LinuxCNC中的HAL运动学组件~~~~~~~~~
- 58同城沈剑:好的架构源于不停地衍变,而非设计-CSDN.NET
- opengl逐点比较法绘直线
- opengl中如何使窗口大小改变时,图形的形状不发生变化?
- 58同城沈剑:好的架构源于不停地衍变,而非设计
- Shell - 文件运算符
- NSOperation 之 Block循环引用——以及nil Nil NULL [NULL null]的区别
- Linux 系统信息分析
- CentOS7 添加用户到 sudoers