OpenCV——彩色图像添加椒盐噪声

x33g5p2x  于2021-10-07 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(524)

一、椒盐噪声

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

二、C++代码

  1. #include <opencv2\opencv.hpp>
  2. #include <iostream>
  3. using namespace cv;
  4. using namespace std;
  5. //-----------------------------------椒盐噪声函数----------------------------------------------
  6. void saltAndPepper(cv::Mat image, int n)
  7. {
  8. for (int k = 0; k < n / 2; k++)
  9. {
  10. // 随机确定图像中添加椒盐噪声的位置
  11. int i, j;
  12. i = std::rand() % image.cols; // 取余数运算,保证在图像的列数内
  13. j = std::rand() % image.rows; // 取余数运算,保证在图像的行数内
  14. int write_black = std::rand() % 2; // 判定为白色噪声还是黑色噪声的变量
  15. // 添加白色噪声
  16. if (write_black == 0)
  17. {
  18. image.at<cv::Vec3b>(j, i)[0] = 255; //cv::Vec3b为opencv定义的一个3个值的向量类型
  19. image.at<cv::Vec3b>(j, i)[1] = 255; //[]指定通道,B:0,G:1,R:2
  20. image.at<cv::Vec3b>(j, i)[2] = 255;
  21. }
  22. // 添加黑色噪声
  23. else
  24. {
  25. image.at<cv::Vec3b>(j, i)[0] = 0; //cv::Vec3b为opencv定义的一个3个值的向量类型
  26. image.at<cv::Vec3b>(j, i)[1] = 0; //[]指定通道,B:0,G:1,R:2
  27. image.at<cv::Vec3b>(j, i)[2] = 0;
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. Mat lena = imread("qq.jpg");
  34. if (lena.empty())
  35. {
  36. cout << "请确认图像文件名称是否正确" << endl;
  37. return -1;
  38. }
  39. imshow("原图", lena);
  40. saltAndPepper(lena, 10000); // 彩色图像添加椒盐噪声
  41. imshow("添加噪声", lena);
  42. waitKey(0);
  43. return 0;
  44. }

三、结果展示

1、原图

2、添加椒盐噪声

四、python代码

  1. import numpy as np
  2. import cv2
  3. def salt_pepper_noise(image, prob):
  4. """ 添加椒盐噪声 :param image: 输入图像 :param prob: 噪声比 :return: 带有椒盐噪声的图像 """
  5. salt = np.zeros(image.shape, np.uint8)
  6. thres = 1 - prob
  7. for i in range(image.shape[0]):
  8. for j in range(image.shape[1]):
  9. rdn = np.random.rand()
  10. if rdn < prob:
  11. salt[i][j] = 0
  12. elif rdn > thres:
  13. salt[i][j] = 255
  14. else:
  15. salt[i][j] = image[i][j]
  16. return salt
  17. src = cv2.imread('qq.jpg')
  18. cv2.namedWindow('input_image', cv2.WINDOW_AUTOSIZE)
  19. cv2.imshow('input_image', src)
  20. tar = salt_pepper_noise(src, 0.01)
  21. cv2.imshow('noise', tar)
  22. cv2.waitKey(0)
  23. cv2.destroyAllWindows()

五、结果展示

1、原图

2、添加椒盐噪声

相关文章