利用OpenCV給彩色圖像添加椒鹽噪聲的方法
一、圖像噪聲
圖像噪聲是圖像在獲取或者傳輸過程中受到隨機信號干擾,妨礙人們對圖像理解及分析處理的信號。很多時候?qū)D像看作隨機過程,因而描述噪聲的方法完全可以借用隨機過程的描述,即使用其概率分布函數(shù)和概率密度分布函數(shù)。圖像噪聲的產(chǎn)生來自圖像獲取中的環(huán)境條件和傳感元器件自身的質(zhì)量,圖像在傳輸過程中產(chǎn)生圖像噪聲的主要因素是所用的傳輸信道受到噪聲污染。
二、椒鹽噪聲
椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相間的亮暗點噪聲,椒鹽噪聲常由圖像切割產(chǎn)生。椒鹽噪聲是指兩種噪聲:鹽噪聲和椒噪聲。鹽噪聲一般是白色噪聲,椒噪聲一般為黑色噪聲。前者屬于高灰度噪聲,或者屬于低灰度噪聲,一般兩種噪聲同時出現(xiàn),呈現(xiàn)黑白雜點。去除椒鹽噪聲常用的方法是中值濾波。
三、C++代碼
#include <opencv2\opencv.hpp> #include <iostream> using namespace cv; using namespace std; //-----------------------------------椒鹽噪聲函數(shù)---------------------------------------------- void saltAndPepper(cv::Mat image, int n) { for (int k = 0; k < n / 2; k++) { // 隨機確定圖像中添加椒鹽噪聲的位置 int i, j; i = std::rand() % image.cols; // 取余數(shù)運算,保證在圖像的列數(shù)內(nèi) j = std::rand() % image.rows; // 取余數(shù)運算,保證在圖像的行數(shù)內(nèi) 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; }
四、結(jié)果展示
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()
六、結(jié)果展示
1、原圖
2、添加椒鹽噪聲
七、總結(jié)
到此這篇關(guān)于利用OpenCV給彩色圖像添加椒鹽噪聲的文章就介紹到這了,更多相關(guān)OpenCV彩色圖像添加椒鹽噪聲內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。