目錄
- 一、椒鹽噪聲
- 二、C++代碼
- 三、結果展示
- 1、原圖
- 2、添加椒鹽噪聲
- 四、python代碼
- 五、結果展示
- 1、原圖
- 2、添加椒鹽噪聲
一、椒鹽噪聲
? ?椒鹽噪聲是數字影像中的常見噪聲,一般是影像傳感器、傳輸信道及解碼處理等產生的黑白相間的亮暗點噪聲,椒鹽噪聲常由影像切割產生,椒鹽噪聲是指兩種噪聲:鹽噪聲和椒噪聲,鹽噪聲一般是白色噪聲,椒噪聲一般為黑色噪聲,前者屬于高灰度噪聲,或者屬于低灰度噪聲,一般兩種噪聲同時出現,呈現黑白雜點,去除椒鹽噪聲常用的方法是中值濾波,
二、C++代碼
#include <opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//-----------------------------------椒鹽噪聲函式----------------------------------------------
void saltAndPepper(cv::Mat image, int n)
{
for (int k = 0; k < n / 2; k++)
{
// 隨機確定影像中添加椒鹽噪聲的位置
int i, j;
i = std::rand() % image.cols; // 取余數運算,保證在影像的列數內
j = std::rand() % image.rows; // 取余數運算,保證在影像的行數內
int write_black = std::rand() % 2; // 判定為白色噪聲還是黑色噪聲的變數
// 添加白色噪聲
if (write_black == 0)
{
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;
}
// 添加黑色噪聲
else
{
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;
}
}
}
int main()
{
Mat lena = imread("qq.jpg");
if (lena.empty())
{
cout << "請確認影像檔案名稱是否正確" << endl;
return -1;
}
imshow("原圖", lena);
saltAndPepper(lena, 10000); // 彩色影像添加椒鹽噪聲
imshow("添加噪聲", lena);
waitKey(0);
return 0;
}
三、結果展示
1、原圖

2、添加椒鹽噪聲

四、python代碼
import numpy as np
import cv2
def salt_pepper_noise(image, prob):
"""
添加椒鹽噪聲
:param image: 輸入影像
:param prob: 噪聲比
:return: 帶有椒鹽噪聲的影像
"""
salt = np.zeros(image.shape, np.uint8)
thres = 1 - prob
for i in range(image.shape[0]):
for j in range(image.shape[1]):
rdn = np.random.rand()
if rdn < prob:
salt[i][j] = 0
elif rdn > thres:
salt[i][j] = 255
else:
salt[i][j] = image[i][j]
return salt
src = cv2.imread('qq.jpg')
cv2.namedWindow('input_image', cv2.WINDOW_AUTOSIZE)
cv2.imshow('input_image', src)
tar = salt_pepper_noise(src, 0.01)
cv2.imshow('noise', tar)
cv2.waitKey(0)
cv2.destroyAllWindows()
五、結果展示
1、原圖

2、添加椒鹽噪聲

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305457.html
標籤:python
