C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)
opencv知識(shí)點(diǎn):
圖像像素最小/最大值 - minMaxLoc
圖像像素均值/標(biāo)準(zhǔn)差 - meanStdDev
本課所解決的問題:
如何獲取圖像像素的最小/最大值?
如何獲取圖像像素的均值/標(biāo)準(zhǔn)差?
通過圖像像素統(tǒng)計(jì)值我們能干什么?
1.常用的像素值統(tǒng)計(jì)
在圖像分析的時(shí)候,我們經(jīng)常需要對(duì)單通道圖像的像素進(jìn)行統(tǒng)計(jì),以下4種是比較常用的
最小值(min)
最大值(max)
平均值(mean)
標(biāo)準(zhǔn)差(standard deviation)
要求這4種統(tǒng)計(jì),我們就要用到以下兩個(gè)API
- minMaxLoc
- meanStdDev
這兩個(gè)API非常有用,日后有很多地方用得到
2.像素值統(tǒng)計(jì)計(jì)算
接下來,我們來應(yīng)用兩個(gè)API,求取4種像素值統(tǒng)計(jì)
首先是最小值,最大值
//函數(shù)定義
void pixel_statistics_demo(Mat& image);
//函數(shù)實(shí)現(xiàn)
void QuickDemo::pixel_statistics_demo(Mat& image) {
?? ?double minv, maxv;
?? ?Point minLoc, maxLoc;
?? ?std::vector<Mat> mvt;
?? ?split(image, mvt);
?? ?/*
?? ?minMaxLoc
?? ??? ?求取單通道圖像像素的最小值,最大值
?? ??? ??? ?共6個(gè)參數(shù)
?? ??? ??? ??? ?第1個(gè)參數(shù) 輸入單通道圖像
?? ??? ??? ??? ?第2個(gè)參數(shù) 輸出最小值
?? ??? ??? ??? ?第3個(gè)參數(shù) 輸出最大值
?? ??? ??? ??? ?第4個(gè)參數(shù) 輸出最小值點(diǎn)的坐標(biāo)
?? ??? ??? ??? ?第5個(gè)參數(shù) 輸出最大值點(diǎn)的坐標(biāo)
?? ??? ??? ?
?? ??? ??? ??? ?第6個(gè)參數(shù) 輸入圖像的子數(shù)組(有時(shí)候我們會(huì)求取ROI區(qū)域的最小/最大值,就會(huì)傳入mask圖像)
?? ??? ??? ??? ??? ??? ?(這里的子數(shù)組,是一種圖像掩模,可以實(shí)現(xiàn)加?xùn)|西/扣東西)?
?? ?*/
?? ?for (int i = 0; i < mvt.size(); i++) {
?? ??? ?minMaxLoc(mvt[i], &minv, &maxv, &minLoc, &maxLoc);
?? ??? ?std::cout << "通道:" << i << " 最小值:" << minv << " 最大值:" << maxv << std::endl;
?? ?}
}
然后是,平均值和標(biāo)準(zhǔn)差
void QuickDemo::pixel_statistics_demo(Mat& image) {
?? ?Mat mean, stddev;
?? ?meanStdDev(image, mean, stddev);
?? ?/*
?? ?meanStdDev
?? ??? ?求取平均值,標(biāo)準(zhǔn)差
?? ??? ??? ?共4個(gè)參數(shù)
?? ??? ??? ??? ?第1個(gè)參數(shù) 輸入
?? ??? ??? ??? ?第2個(gè)參數(shù) 輸出圖像像素的平均值,每個(gè)通道都會(huì)輸出一個(gè)
?? ??? ??? ??? ?第3個(gè)參數(shù) 輸出圖像像素的標(biāo)準(zhǔn)差,每個(gè)通道都會(huì)輸出一個(gè)
?? ??? ??? ??? ?
?? ??? ??? ??? ?第4個(gè)參數(shù) 輸入圖像的子數(shù)組(有時(shí)候我們會(huì)求取ROI區(qū)域的平均值/標(biāo)準(zhǔn)差,就會(huì)傳入mask圖像)
?? ??? ??? ??? ??? ??? ?(這里的子數(shù)組,是一種圖像掩模,可以實(shí)現(xiàn)加?xùn)|西/扣東西)?
?? ?*/
?? ?std::cout << "平均值" << std::endl << mean << std::endl;
?? ?std::cout << "標(biāo)準(zhǔn)差" << std::endl<<stddev << std::endl;
}
上圖中,輸出平均值和標(biāo)準(zhǔn)差,是把所有通道的都輸出了,那如果怎么輸出單通道的呢?
很簡(jiǎn)單,只要用到Mat::at
//opencv為了保證精度,平均值,標(biāo)準(zhǔn)差矩陣的數(shù)據(jù)類型是double類型 std::cout<<"平均值"<< mean.at<double>(0, 0)<<std::endl; std::cout << "標(biāo)準(zhǔn)差" << stddev.at<double>(0, 0) << std::endl;

3.圖像統(tǒng)計(jì)值分析
這里簡(jiǎn)單提一下圖像分析的事情
圖像的平均值和標(biāo)準(zhǔn)差會(huì)給我們帶來一定的信息
比如:當(dāng)平均值恒定,標(biāo)準(zhǔn)差很小時(shí),我們可以想到是基本純色的圖片,也就是低對(duì)比度的圖
在圖像分析的時(shí)候,我們關(guān)注圖像的有效信息,也就是ROI區(qū)域。
通過圖像像素的統(tǒng)計(jì)值,我們就可以對(duì)圖像的有效信息作出判斷。
比如,當(dāng)圖像標(biāo)準(zhǔn)差很小時(shí),圖像所攜帶的有效信息會(huì)很少,我們就要對(duì)圖像進(jìn)行篩選,通過一些手段過濾掉一些東西。
本課所用API查閱
1.minMaxLoc




2.meanStdDev


3.Mat::at
雖然有12種重載,但只有6種傳參方式
1.單維度坐標(biāo)——i0:沿維度 0 的索引



2.雙維度坐標(biāo)——row 沿維度 0 的索引 ;col 沿維度 1 的索引

3.三維度坐標(biāo)——i0 沿維度 0 的索引;i1 沿維度 1 的索引;i2 沿維度 2 的索引

4.維度數(shù)組坐標(biāo)——int數(shù)組

5.維度數(shù)組坐標(biāo)——vector數(shù)組

6.點(diǎn)的坐標(biāo)——point類

以上就是C++ OpenCV學(xué)習(xí)之圖像像素值統(tǒng)計(jì)的詳細(xì)內(nèi)容,更多關(guān)于OpenCV像素值統(tǒng)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- C++標(biāo)準(zhǔn)庫(kù)學(xué)習(xí)之weak_ptr智能指針用法詳解
- C++ 學(xué)習(xí)筆記實(shí)戰(zhàn)寫一個(gè)簡(jiǎn)單的線程池示例
- C++學(xué)習(xí)之如何進(jìn)行內(nèi)存資源管理
- C++中set的用法學(xué)習(xí)
- C++學(xué)習(xí)之命名空間詳解
- C++學(xué)習(xí)之異常機(jī)制詳解
- C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解
- C++序列操作函數(shù)學(xué)習(xí)最全指南
- C/C++ 多線程的學(xué)習(xí)心得總結(jié)
- C++中的while循環(huán)和for循環(huán)語句學(xué)習(xí)教程
- C++ 學(xué)習(xí)之旅 Windows程序內(nèi)部運(yùn)行原理
- C++入門之基礎(chǔ)語法學(xué)習(xí)教程
- C++ 入門指南:零基礎(chǔ)入門教學(xué)
相關(guān)文章
C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配
C++ 不允許變量重名,但是允許多個(gè)函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關(guān)于C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配的相關(guān)資料,需要的朋友可以參考下2019-01-01
C++?QT實(shí)現(xiàn)獲取本機(jī)網(wǎng)卡信息
這篇文章主要為大家詳細(xì)介紹了如何利用qt自帶的QNetworkInterface接口以及c++Iphlpapi庫(kù),獲取當(dāng)前windows電腦下的網(wǎng)卡信息,需要的可以參考下2024-01-01
C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析
這篇文章主要介紹了C++xxx_cast轉(zhuǎn)換代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
如何基于C語言socket編程實(shí)現(xiàn)TCP通信
本文介紹了如何基于C語言socket編程實(shí)現(xiàn)TCP通信,下面小編來簡(jiǎn)單介紹下2019-05-05

