欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

opencv實(shí)現(xiàn)像素統(tǒng)計(jì)的示例代碼

 更新時(shí)間:2025年01月06日 08:54:43   作者:編碼小哥  
本文介紹了OpenCV中統(tǒng)計(jì)圖像像素信息的常用方法和函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在 OpenCV 中,統(tǒng)計(jì)圖像的像素信息(如像素值分布、最大值、最小值、均值等)是常見的操作。以下是一些常用的方法和函數(shù),用于統(tǒng)計(jì)圖像的像素信息:

1. 統(tǒng)計(jì)像素值的基本信息

  • 最大值、最小值、均值、標(biāo)準(zhǔn)差: 使用 cv::minMaxLoc() 和 cv::meanStdDev() 函數(shù)可以快速計(jì)算圖像的最大值、最小值、均值和標(biāo)準(zhǔn)差。
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 讀取灰度圖像
    if (image.empty()) {
        std::cerr << "Error: Could not load image!" << std::endl;
        return -1;
    }

    double minVal, maxVal;
    cv::Point minLoc, maxLoc;
    cv::minMaxLoc(image, &minVal, &maxVal, &minLoc, &maxLoc);

    cv::Scalar mean, stddev;
    cv::meanStdDev(image, mean, stddev);

    std::cout << "Min value: " << minVal << " at " << minLoc << std::endl;
    std::cout << "Max value: " << maxVal << " at " << maxLoc << std::endl;
    std::cout << "Mean: " << mean[0] << std::endl;
    std::cout << "Stddev: " << stddev[0] << std::endl;

    return 0;
}

2. 統(tǒng)計(jì)像素值的直方圖

  • 直方圖計(jì)算: 使用 cv::calcHist() 函數(shù)可以計(jì)算圖像的直方圖,用于分析像素值的分布。
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 讀取灰度圖像
    if (image.empty()) {
        std::cerr << "Error: Could not load image!" << std::endl;
        return -1;
    }

    // 定義直方圖參數(shù)
    int histSize = 256; // 直方圖的 bin 數(shù)量
    float range[] = {0, 256}; // 像素值范圍
    const float* histRange = {range};
    bool uniform = true, accumulate = false;

    cv::Mat hist;
    cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);

    // 打印直方圖
    for (int i = 0; i < histSize; i++) {
        std::cout << "Bin " << i << ": " << hist.at<float>(i) << std::endl;
    }

    return 0;
}

3. 統(tǒng)計(jì)像素值的總和

  • 像素值求和: 使用 cv::sum() 函數(shù)可以計(jì)算圖像中所有像素值的總和。
cv::Scalar sum = cv::sum(image);
std::cout << "Sum of pixel values: " << sum[0] << std::endl;

4. 統(tǒng)計(jì)非零像素的數(shù)量

  • 非零像素統(tǒng)計(jì): 使用 cv::countNonZero() 函數(shù)可以統(tǒng)計(jì)圖像中非零像素的數(shù)量。
int nonZeroCount = cv::countNonZero(image);
std::cout << "Non-zero pixel count: " << nonZeroCount << std::endl;

5. 統(tǒng)計(jì)像素值的分布(分通道)

  • 對于多通道圖像(如 RGB 圖像),可以分別統(tǒng)計(jì)每個(gè)通道的像素信息。
cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR); // 讀取彩色圖像
std::vector<cv::Mat> channels;
cv::split(image, channels); // 分離通道

for (int i = 0; i < channels.size(); i++) {
    double minVal, maxVal;
    cv::minMaxLoc(channels[i], &minVal, &maxVal);
    std::cout << "Channel " << i << " - Min: " << minVal << ", Max: " << maxVal << std::endl;
}

6. 統(tǒng)計(jì)像素值的百分比

如果需要統(tǒng)計(jì)像素值的百分比(如 95% 的像素值小于某個(gè)閾值),可以通過直方圖計(jì)算累積分布函數(shù)(CDF )來實(shí)現(xiàn)。

cv::Mat hist;
cv::calcHist(&image, 1, 0, cv::Mat(), hist, 1, &histSize, &histRange, uniform, accumulate);

// 計(jì)算累積分布函數(shù)
for (int i = 1; i < histSize; i++) {
    hist.at<float>(i) += hist.at<float>(i - 1);
}

// 歸一化
hist /= image.total();

// 查找 95% 的像素值閾值
float threshold = 0.95;
int pixelValueThreshold = 0;
for (int i = 0; i < histSize; i++) {
    if (hist.at<float>(i) >= threshold) {
        pixelValueThreshold = i;
        break;
    }
}
std::cout << "95% of pixel values are below: " << pixelValueThreshold << std::endl;

通過以上方法,可以有效地統(tǒng)計(jì)和分析 OpenCV 圖像的像素信息。這些統(tǒng)計(jì)信息對于圖像處理、分析和特征提取等任務(wù)非常重要。根據(jù)具體需求,可以選擇合適的方法進(jìn)行像素統(tǒng)計(jì)。 

到此這篇關(guān)于opencv實(shí)現(xiàn)像素統(tǒng)計(jì)的示例代碼的文章就介紹到這了,更多相關(guān)opencv 像素統(tǒng)計(jì)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)彈跳小球

    C語言實(shí)現(xiàn)彈跳小球

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)彈跳小球,設(shè)置了小球分?jǐn)?shù)及過關(guān)難度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++輕量級(jí)界面開發(fā)框架ImGUI介紹小結(jié)

    C++輕量級(jí)界面開發(fā)框架ImGUI介紹小結(jié)

    如果從事過C++?Windows客戶端開發(fā),大家對MFC、Qt、DuiLib等各種DirectUI應(yīng)該有了解,本篇給大家介紹一個(gè)超級(jí)輕量級(jí)的C++開源跨平臺(tái)圖形界面框架ImGUI,感興趣的可以了解一下
    2021-11-11
  • OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理詳解

    OpenCV是一款由Intel公司俄羅斯團(tuán)隊(duì)發(fā)起并參與和維護(hù)的一個(gè)計(jì)算機(jī)視覺處理開源軟件庫,支持與計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,下面這篇文章主要給大家介紹了關(guān)于OpenCV數(shù)字圖像處理基于C++之圖像形態(tài)學(xué)處理的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 關(guān)于C++函數(shù)模版的實(shí)現(xiàn)講解

    關(guān)于C++函數(shù)模版的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++函數(shù)模版的實(shí)現(xiàn)講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • VC6.0代碼自動(dòng)提示 VC6.0在win7環(huán)境下代碼提示智能化

    VC6.0代碼自動(dòng)提示 VC6.0在win7環(huán)境下代碼提示智能化

    作為程序猿的你,是否已經(jīng)喜歡或習(xí)慣依賴IDE開發(fā)環(huán)境呢,有了IDE環(huán)境,即使你想不起方法全名,只要知道某個(gè)前綴,或哪怕在提示列表中,一一查詢,也可以找到自己想找的方法或?qū)傩?/div> 2013-01-01
  • 詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中strcpy()函數(shù)與strncpy()函數(shù)的使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C++ 中消息隊(duì)列函數(shù)實(shí)例詳解

    C++ 中消息隊(duì)列函數(shù)實(shí)例詳解

    這篇文章主要介紹了C++ 中消息隊(duì)列函數(shù)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言遞歸函數(shù)與漢諾塔問題簡明理解

    C語言遞歸函數(shù)與漢諾塔問題簡明理解

    遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件
    2022-07-07
  • OpenCV實(shí)現(xiàn)圖像轉(zhuǎn)換為漫畫效果

    OpenCV實(shí)現(xiàn)圖像轉(zhuǎn)換為漫畫效果

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像轉(zhuǎn)換為漫畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • c++中for雙循環(huán)的那些事

    c++中for雙循環(huán)的那些事

    本人很菜,今天看《C++編程思想》中的一道課后題中說到這樣一個(gè)問題。修改兩層嵌套的for循環(huán)的標(biāo)識(shí)符,觀察結(jié)果變化
    2013-05-05

最新評(píng)論