最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ OpenCV實(shí)現(xiàn)與添加椒鹽噪聲和高斯噪音

 更新時(shí)間:2023年09月13日 09:47:01   作者:錫蘭_CC  
圖像噪聲是圖像在獲取或是傳輸過程中受到隨機(jī)信號(hào)干擾,妨礙人們對圖像理解及分析處理的信號(hào),本文為大家整理了C++結(jié)合OpenCV為圖像添加椒鹽噪聲和高斯噪音的代碼,需要的可以收藏一下

一、什么是圖像噪音

圖像噪聲是圖像在獲取或是傳輸過程中受到隨機(jī)信號(hào)干擾,妨礙人們對圖像理解及分析處理的信號(hào)。很多時(shí)候?qū)D像噪聲看做多維隨機(jī)過程,因而描述噪聲的方法完全可以借用隨機(jī)過程的描述, 也就是用它的概率分布函數(shù)和概率密度分布函數(shù)。圖像噪聲的產(chǎn)生來自圖像獲取中的環(huán)境條件和傳感元器件自身的質(zhì)量,圖像在傳輸過程中產(chǎn)生圖像噪聲的主要因素是所用的傳輸信道受到了噪聲的污染。

二、椒鹽噪聲

椒鹽噪聲是數(shù)字圖像中的常見噪聲,一般是由圖像傳感器、傳輸信道及解碼處理等產(chǎn)生的黑白相見的亮暗點(diǎn)噪聲,椒鹽噪聲常由圖像切割產(chǎn)生。椒鹽噪聲是指兩種噪聲:鹽噪聲(salt noise)及椒噪聲(pepper noise)。鹽噪聲一般是白色噪聲,椒噪聲一般是黑色噪聲,前者高灰度噪聲,后者屬于低灰度噪聲,一般兩種噪聲同時(shí)出現(xiàn),呈現(xiàn)在圖像上就是黑白雜點(diǎn)。圖像去除脈沖干擾及椒鹽噪聲最常用的算法是中值濾波,圖像模擬添加椒鹽噪聲是通過隨機(jī)獲取像素值點(diǎn)并設(shè)置為高亮點(diǎn)來實(shí)現(xiàn)的。

示例代碼

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cstdlib>
using namespace cv;
// 向圖像添加椒鹽噪聲的函數(shù)
Mat addSaltNoise(Mat srcImage, int n)
{
	Mat resultImage = srcImage.clone();
	// 循環(huán)添加椒鹽噪聲'n'次
	for (int k = 0; k < n; k++)
	{
		// 隨機(jī)選擇一個(gè)像素位置
		int i = rand() % resultImage.cols;
		int j = rand() % resultImage.rows;
		// 檢查圖像的通道數(shù)
		// 如果是灰度圖像(1個(gè)通道),將像素值設(shè)置為255
		if (resultImage.channels() == 1)
			resultImage.at<uchar>(j, i) = 255;
		else // 如果是彩色圖像(3個(gè)通道),將所有通道的值都設(shè)置為255
		{
			resultImage.at<Vec3b>(j, i)[0] = 255;
			resultImage.at<Vec3b>(j, i)[1] = 255;
			resultImage.at<Vec3b>(j, i)[2] = 255;
		}
	}
	return resultImage;
}
int main()
{
	// 從文件加載源圖像
	Mat srcImage = imread("C://Users//86173//Desktop//cc.png");
	// 檢查圖像數(shù)據(jù)是否成功加載
	if (!srcImage.data)
		return -1;
	// 調(diào)用addSaltNoise函數(shù),傳入源圖像和要添加的噪聲像素?cái)?shù)量
	Mat resultImage = addSaltNoise(srcImage, 5000);
	// 顯示原始圖像和帶有噪聲的圖像
	imshow("srcImage", srcImage);
	imshow("resultImage", resultImage);
	// 等待按鍵輸入,然后退出程序
	waitKey(0);
	return 0;
}

效果圖

三、高斯噪聲

高斯噪聲是指概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。如果一個(gè)噪聲,它的幅度服從高斯分布,而它的功率譜密度又是分布均勻的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不想關(guān),一階矩為常數(shù),是指先后信號(hào)在時(shí)間上的相關(guān)性。高斯白噪聲包括熱噪聲和散粒噪聲。高斯噪聲完全由其時(shí)變平均值和兩瞬時(shí)的協(xié)方差函數(shù)來確定,若噪聲為平穩(wěn)的,則平均值與時(shí)間無關(guān),而協(xié)方差函數(shù)則變成僅和所考慮的兩瞬時(shí)之方差有關(guān)的相關(guān)函數(shù),它在意義上等效于功率譜密度。高斯噪聲可以由大量獨(dú)立的脈沖產(chǎn)生,從而在任何有限時(shí)間間隔內(nèi),這些脈沖中的每一個(gè)脈沖值與所有脈沖值的總和相比都可以忽略不計(jì)。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <cstdlib>
#include <limits>
#include <cmath>
using namespace cv;
using namespace std;
// 生成高斯分布的隨機(jī)數(shù)
double generateGaussianNoise(double mu, double sigma)
{
    // 定義一個(gè)特別小的值
    const double epsilon = numeric_limits<double>::min();
    static double z0, z1;
    static bool flag = false;
    flag = !flag;
    // flag為假,構(gòu)造高斯隨機(jī)變量
    if (!flag)
        return z1 * sigma + mu;
    double u1, u2;
    // 構(gòu)造隨機(jī)變量
    do
    {
        u1 = rand() * (1.0 / RAND_MAX);
        u2 = rand() * (1.0 / RAND_MAX);
    } while (u1 <= epsilon);
    // flag為真構(gòu)造高斯隨機(jī)變量X
    z0 = sqrt(-2.0 * log(u1)) * cos(2 * CV_PI * u2);
    z1 = sqrt(-2.0 * log(u1)) * sin(2 * CV_PI * u2);
    return z1 * sigma + mu;
}
// 為圖像添加高斯噪聲
Mat addGaussianNoise(Mat& srcImage)
{
    Mat resultImage = srcImage.clone();    // 深拷貝,克隆
    int channels = resultImage.channels();    // 獲取圖像的通道
    int nRows = resultImage.rows;    // 圖像的行數(shù)
    int nCols = resultImage.cols * channels;   // 圖像的總列數(shù)
    // 判斷圖像的連續(xù)性
    if (resultImage.isContinuous())    // 判斷矩陣是否連續(xù),若連續(xù),我們相當(dāng)于只需要遍歷一個(gè)一維數(shù)組
    {
        nCols *= nRows;
        nRows = 1;
    }
    for (int i = 0; i < nRows; i++)
    {
        for (int j = 0; j < nCols; j++)
        {
            // 添加高斯噪聲
            int val = resultImage.ptr<uchar>(i)[j] + generateGaussianNoise(2, 0.8) * 32;
            if (val < 0)
                val = 0;
            if (val > 255)
                val = 255;
            resultImage.ptr<uchar>(i)[j] = (uchar)val;
        }
    }
    return resultImage;
}
int main()
{
    Mat srcImage = imread("C://Users//86173//Desktop//cc.png");
    if (!srcImage.data)
        return -1;
    imshow("srcImage", srcImage);
    Mat resultImage = addGaussianNoise(srcImage);
    imshow("resultImage", resultImage);
    waitKey(0);
    return 0;
}

效果圖

以上就是C++ OpenCV實(shí)現(xiàn)與添加椒鹽噪聲和高斯噪音的詳細(xì)內(nèi)容,更多關(guān)于C++ OpenCV噪聲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 源碼解析C++20新特性如何簡化線程超時(shí)取消

    源碼解析C++20新特性如何簡化線程超時(shí)取消

    C++20中增加了很多重量級新特性,它不僅帶來了ranges、concept和協(xié)程,也為多線程編程帶來了jthread和stop_source這些強(qiáng)力輔助,今天要說的就是利用jthread和stop_source來簡化線程超時(shí)控制的實(shí)現(xiàn),感興趣的可以了解下
    2025-12-12
  • C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆

    C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆

    這篇文章主要為大家介紹了C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹堆的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語言陷阱與缺陷之?dāng)?shù)組越界訪問詳解

    C語言陷阱與缺陷之?dāng)?shù)組越界訪問詳解

    這篇文章主要為大家詳細(xì)介紹了C語言的數(shù)組越界訪問,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Qt實(shí)現(xiàn)UI界面純代碼示例

    Qt實(shí)現(xiàn)UI界面純代碼示例

    這篇文章主要給大家介紹了關(guān)于Qt實(shí)現(xiàn)UI界面的相關(guān)資料,使用Qt純代碼,實(shí)現(xiàn)了基本的界面,對大家學(xué)習(xí)或者使用Qt具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • C/C++中的回調(diào)用法詳細(xì)講解

    C/C++中的回調(diào)用法詳細(xì)講解

    這篇文章主要介紹了回調(diào)函數(shù)在C/C++中的重要意義及應(yīng)用,回調(diào)函數(shù)通過將函數(shù)作為參數(shù)傳遞,實(shí)現(xiàn)了模塊的解耦、靈活性和可擴(kuò)展性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • C++實(shí)現(xiàn)LeetCode(111.二叉樹的最小深度)

    C++實(shí)現(xiàn)LeetCode(111.二叉樹的最小深度)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(111.二叉樹的最小深度),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • DEV?C++源碼編譯后控制臺(tái)輸出中文亂碼問題解決

    DEV?C++源碼編譯后控制臺(tái)輸出中文亂碼問題解決

    本文主要介紹了DEV?C++源碼編譯后控制臺(tái)輸出中文亂碼問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 使用C語言實(shí)現(xiàn)字符串左旋和右旋問題

    使用C語言實(shí)現(xiàn)字符串左旋和右旋問題

    這篇文章主要介紹了使用C語言實(shí)現(xiàn)字符串左旋和右旋問題,需要的朋友可以參考下
    2018-07-07
  • Visual Studio 2022 上使用ffmpeg的詳細(xì)步驟

    Visual Studio 2022 上使用ffmpeg的詳細(xì)步驟

    文章介紹了在開發(fā)項(xiàng)目中配置FFmpeg庫的步驟,添加包含目錄、庫目錄、依賴項(xiàng)及動(dòng)態(tài)庫路徑,確保編譯器和鏈接器正確識(shí)別FFmpeg資源,最后通過測試驗(yàn)證配置有效性,感興趣的朋友一起看看吧
    2025-07-07
  • C語言中continue的用法詳解

    C語言中continue的用法詳解

    在C語言當(dāng)中的continue和break語句是有一些類似的,但是它并不是強(qiáng)制進(jìn)行終止的,下面這篇文章主要給大家介紹了關(guān)于C語言中continue用法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11

最新評論

改则县| 万宁市| 建水县| 永吉县| 永春县| 新野县| 锡林浩特市| 古交市| 桂阳县| 九寨沟县| 邢台市| 遂宁市| 闽清县| 勃利县| 太保市| 云浮市| 信阳市| 永德县| 泾川县| 沿河| 漳州市| 昭苏县| 泗水县| 尉犁县| 洪泽县| 安丘市| 长春市| 台山市| 克拉玛依市| 襄汾县| 天镇县| 乡宁县| 陇南市| 昂仁县| 怀安县| 甘洛县| 南昌县| 新郑市| 大英县| 新沂市| 台州市|