Advertisement

opencv图像处理之椒盐噪声

阅读量:

Hellow,我是jack,今天给大家分享的是椒盐噪声。话不多说,让我们直接进入正题。

在添加椒盐时,我们需要的是随机添加,所以我们先来介绍一个函数

int rand(void);

rand()函数用来产生随机数,但是,rand()的内部实现是用线性同余法实现的,是伪随机数,由于周期较长,因此在一定范围内可以看成是随机的。

rand()会返回一个范围在0到RAND_MAX(至少是32767)之间的伪随机数(整数)。

在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子为1。随机种子相同,每次产生的随机数也会相同。

接着,让我们在介绍一下添加椒盐噪声的函数

cv ::Mat addSaltNoise(const cv ::Mat srcImage, int n)

//其中srcImage为原图片,n为椒盐噪声点的个数

知道了这些之后,那就让我们尝试一下代码实现吧!

复制代码
 int main() {

    
 	cv::Mat srcimage, equ;
    
 	cv::Mat blurimage, medianblurImage;
    
  
    
 	cv::Mat addSaltNoise(const cv::Mat, int);
    
 	cv::Mat image1 = cv::imread("D:\ 桌面\ girl.jpg");
    
 	//cv::imshow("原图", image1);
    
 	//
    
 	if (image1.empty())
    
 		return -1;
    
 	cv::Mat resultimage=addSaltNoise(image1,5000);
    
  
    
  
    
 	cv::imshow("image",image1);
    
 	cv::imshow("resultimage", resultimage);
    
  
    
  
    
 	cv::waitKey (0);
    
 	
    
 }
    
  
    
 //添加椒盐噪声
    
 cv::Mat addSaltNoise(const cv::Mat image1, int n) {
    
 	cv::Mat resultimage = image1.clone();
    
 	for (int k = 0; k < n; k++) {
    
 		//随机取值行列
    
 		int i = rand() % resultimage.cols;
    
 		int j = rand() % resultimage.rows;
    
 		//图像通道判断
    
 		if (resultimage.channels() == 1) {
    
 			if (rand() % 2) {
    
 				resultimage.at<uchar>(j, i) = 255;
    
 			}
    
 			else {
    
 				resultimage.at<uchar>(j, i) = 0;
    
 			}
    
 		}
    
 		else{
    
 			if (rand() % 2) {
    
 				resultimage.at<cv::Vec3b>(j, i)[0] = 255;
    
 				resultimage.at<cv::Vec3b>(j, i)[1] = 255;
    
 				resultimage.at<cv::Vec3b>(j, i)[2] = 255;
    
 			}
    
 			else {
    
 				resultimage.at<cv::Vec3b>(j, i)[0] = 0;
    
 				resultimage.at<cv::Vec3b>(j, i)[1] = 0;
    
 				resultimage.at<cv::Vec3b>(j, i)[2] = 0;
    
 			}
    
 			
    
 		}
    
 	}
    
 	//cv::imshow("resultimage", resultiamge);
    
 	//cv::waitKey (0);
    
 	return resultimage;
    
 	}

源图像
结果图

你们学会了吗??有什么疑问可以一起探讨!

本章就和大家分享到这里,谢谢。

欢迎指正

全部评论 (0)

还没有任何评论哟~