OpenCV—图像椒盐噪声生成器



OpenCV—图像椒盐噪声生成器


椒盐噪声

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0,加入椒盐噪声的图像如下图所示:


原图


图像加入黑白椒盐噪声后


图像分通道加入椒盐噪声

添加椒盐噪声的函数

函数:

[cpp]  view plain  copy
  1. void salt(cv::Mat image, int n)  
  2. void pepper(cv::Mat image, int n)  

参数:

  • image — 输入图像(输出图像)灰度或彩色模式
  • n — 噪点个数

[cpp]  view plain  copy
  1. //盐噪声  
  2. void salt(cv::Mat image, int n) {  
  3.   
  4.     int i,j;  
  5.     for (int k=0; k<n/2; k++) {  
  6.   
  7.         // rand() is the random number generator  
  8.         i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22  
  9.         j = std::rand()%image.rows;   
  10.   
  11.         if (image.type() == CV_8UC1) { // gray-level image  
  12.   
  13.             image.at<uchar>(j,i)= 255; //at方法需要指定Mat变量返回值类型,如uchar等  
  14.   
  15.         } else if (image.type() == CV_8UC3) { // color image  
  16.   
  17.             image.at<cv::Vec3b>(j,i)[0]= 255; //cv::Vec3b为opencv定义的一个3个值的向量类型  
  18.             image.at<cv::Vec3b>(j,i)[1]= 255; //[]指定通道,B:0,G:1,R:2  
  19.             image.at<cv::Vec3b>(j,i)[2]= 255;   
  20.         }  
  21.     }  
  22. }  
  23.   
  24. //椒噪声  
  25. void pepper(cv::Mat image, int n) {  
  26.   
  27.     int i,j;  
  28.     for (int k=0; k<n; k++) {  
  29.   
  30.         // rand() is the random number generator  
  31.         i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22  
  32.         j = std::rand()%image.rows;   
  33.   
  34.         if (image.type() == CV_8UC1) { // gray-level image  
  35.   
  36.             image.at<uchar>(j,i)= 0; //at方法需要指定Mat变量返回值类型,如uchar等  
  37.   
  38.         } else if (image.type() == CV_8UC3) { // color image  
  39.   
  40.             image.at<cv::Vec3b>(j,i)[0]= 0; //cv::Vec3b为opencv定义的一个3个值的向量类型  
  41.             image.at<cv::Vec3b>(j,i)[1]= 0; //[]指定通道,B:0,G:1,R:2  
  42.             image.at<cv::Vec3b>(j,i)[2]= 0;   
  43.         }  
  44.     }  
  45. }  
想要分通道加入椒盐噪声,只需要在image.at<cv::Vec3b>(j,i)[0]或[1]、[2]三个通道随机加入255或0即可。

转载请注明:iracer的CSDN博客  http://blog.csdn.net/iracer/article/details/49383491
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iracer/article/details/49383491

OpenCV—图像椒盐噪声生成器


椒盐噪声

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,也有可能表现为在单个像素BGR三个通道随机出现的255或0,加入椒盐噪声的图像如下图所示:


原图


图像加入黑白椒盐噪声后


图像分通道加入椒盐噪声

添加椒盐噪声的函数

函数:

[cpp]  view plain  copy
  1. void salt(cv::Mat image, int n)  
  2. void pepper(cv::Mat image, int n)  

参数:

  • image — 输入图像(输出图像)灰度或彩色模式
  • n — 噪点个数

[cpp]  view plain  copy
  1. //盐噪声  
  2. void salt(cv::Mat image, int n) {  
  3.   
  4.     int i,j;  
  5.     for (int k=0; k<n/2; k++) {  
  6.   
  7.         // rand() is the random number generator  
  8.         i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22  
  9.         j = std::rand()%image.rows;   
  10.   
  11.         if (image.type() == CV_8UC1) { // gray-level image  
  12.   
  13.             image.at<uchar>(j,i)= 255; //at方法需要指定Mat变量返回值类型,如uchar等  
  14.   
  15.         } else if (image.type() == CV_8UC3) { // color image  
  16.   
  17.             image.at<cv::Vec3b>(j,i)[0]= 255; //cv::Vec3b为opencv定义的一个3个值的向量类型  
  18.             image.at<cv::Vec3b>(j,i)[1]= 255; //[]指定通道,B:0,G:1,R:2  
  19.             image.at<cv::Vec3b>(j,i)[2]= 255;   
  20.         }  
  21.     }  
  22. }  
  23.   
  24. //椒噪声  
  25. void pepper(cv::Mat image, int n) {  
  26.   
  27.     int i,j;  
  28.     for (int k=0; k<n; k++) {  
  29.   
  30.         // rand() is the random number generator  
  31.         i = std::rand()%image.cols; // % 整除取余数运算符,rand=1022,cols=1000,rand%cols=22  
  32.         j = std::rand()%image.rows;   
  33.   
  34.         if (image.type() == CV_8UC1) { // gray-level image  
  35.   
  36.             image.at<uchar>(j,i)= 0; //at方法需要指定Mat变量返回值类型,如uchar等  
  37.   
  38.         } else if (image.type() == CV_8UC3) { // color image  
  39.   
  40.             image.at<cv::Vec3b>(j,i)[0]= 0; //cv::Vec3b为opencv定义的一个3个值的向量类型  
  41.             image.at<cv::Vec3b>(j,i)[1]= 0; //[]指定通道,B:0,G:1,R:2  
  42.             image.at<cv::Vec3b>(j,i)[2]= 0;   
  43.         }  
  44.     }  
  45. }  
想要分通道加入椒盐噪声,只需要在image.at<cv::Vec3b>(j,i)[0]或[1]、[2]三个通道随机加入255或0即可。

转载请注明:iracer的CSDN博客  http://blog.csdn.net/iracer/article/details/49383491
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iracer/article/details/49383491

猜你喜欢

转载自blog.csdn.net/a8039974/article/details/80554525