C++ OpenCV學習之圖像像素值統計

opencv知識點:

圖像像素最小/最大值 – minMaxLoc

圖像像素均值/標準差 – meanStdDev

本課所解決的問題:

如何獲取圖像像素的最小/最大值?

如何獲取圖像像素的均值/標準差?

通過圖像像素統計值我們能幹什麼?

1.常用的像素值統計

在圖像分析的時候,我們經常需要對單通道圖像的像素進行統計,以下4種是比較常用的

最小值(min)

最大值(max)

平均值(mean)

標準差(standard deviation)

要求這4種統計,我們就要用到以下兩個API

  • minMaxLoc
  • meanStdDev

這兩個API非常有用,日後有很多地方用得到

2.像素值統計計算

接下來,我們來應用兩個API,求取4種像素值統計

首先是最小值,最大值

//函數定義
void pixel_statistics_demo(Mat& image);
//函數實現
void QuickDemo::pixel_statistics_demo(Mat& image) {

    double minv, maxv;
    Point minLoc, maxLoc;

    std::vector<Mat> mvt;
    split(image, mvt);

    /*
    minMaxLoc
        求取單通道圖像像素的最小值,最大值
            共6個參數
                第1個參數 輸入單通道圖像
                第2個參數 輸出最小值
                第3個參數 輸出最大值
                第4個參數 輸出最小值點的坐標
                第5個參數 輸出最大值點的坐標
            
                第6個參數 輸入圖像的子數組(有時候我們會求取ROI區域的最小/最大值,就會傳入mask圖像)
                        (這裡的子數組,是一種圖像掩模,可以實現加東西/扣東西) 
    */
    for (int i = 0; i < mvt.size(); i++) {
        minMaxLoc(mvt[i], &minv, &maxv, &minLoc, &maxLoc);
        std::cout << "通道:" << i << " 最小值:" << minv << " 最大值:" << maxv << std::endl;
    }

}

然後是,平均值和標準差

void QuickDemo::pixel_statistics_demo(Mat& image) {

    Mat mean, stddev;

    meanStdDev(image, mean, stddev);
    /*
    meanStdDev
        求取平均值,標準差
            共4個參數
                第1個參數 輸入
                第2個參數 輸出圖像像素的平均值,每個通道都會輸出一個
                第3個參數 輸出圖像像素的標準差,每個通道都會輸出一個
                
                第4個參數 輸入圖像的子數組(有時候我們會求取ROI區域的平均值/標準差,就會傳入mask圖像)
                        (這裡的子數組,是一種圖像掩模,可以實現加東西/扣東西) 
    */
    std::cout << "平均值" << std::endl << mean << std::endl;
    std::cout << "標準差" << std::endl<<stddev << std::endl;
}

上圖中,輸出平均值和標準差,是把所有通道的都輸出瞭,那如果怎麼輸出單通道的呢?

很簡單,隻要用到Mat::at

//opencv為瞭保證精度,平均值,標準差矩陣的數據類型是double類型
std::cout<<"平均值"<< mean.at<double>(0, 0)<<std::endl;
std::cout << "標準差" << stddev.at<double>(0, 0) << std::endl;

3.圖像統計值分析

這裡簡單提一下圖像分析的事情

圖像的平均值和標準差會給我們帶來一定的信息

比如:當平均值恒定,標準差很小時,我們可以想到是基本純色的圖片,也就是低對比度的圖

在圖像分析的時候,我們關註圖像的有效信息,也就是ROI區域。

通過圖像像素的統計值,我們就可以對圖像的有效信息作出判斷。

比如,當圖像標準差很小時,圖像所攜帶的有效信息會很少,我們就要對圖像進行篩選,通過一些手段過濾掉一些東西。

本課所用API查閱

1.minMaxLoc

2.meanStdDev

3.Mat::at

雖然有12種重載,但隻有6種傳參方式

1.單維度坐標——i0:沿維度 0 的索引

2.雙維度坐標——row 沿維度 0 的索引 ;col 沿維度 1 的索引

3.三維度坐標——i0 沿維度 0 的索引;i1 沿維度 1 的索引;i2 沿維度 2 的索引

4.維度數組坐標——int數組

5.維度數組坐標——vector數組

6.點的坐標——point類

以上就是C++ OpenCV學習之圖像像素值統計的詳細內容,更多關於OpenCV像素值統計的資料請關註WalkonNet其它相關文章!

推薦閱讀: