opencv —— minMaxLoc 尋找圖像全局最大最小值


尋找最值:minMaxLoc 函數

minMaxLoc 函數的作用是在數組中找到全局最小和最大值。

void minMaxLoc(InputArray src, double* minVal, double* maxVal = 0, Point* minLoc = 0, Point* maxLoc = 0, InputArray mask = noArray());

  • src,輸入的數組,若是圖像,需為單通道圖像。
  • minVal,返回最小值的指針。若無需返回,此值設為 NULL。
  • maxVal,返回最大值的指針。若無需返回,此值設為 NULL。
  • minLoc,返回最小值位置的指針(二維情況下)。若無需返回,此值設為 NULL。
  • maxVal,返回最大值位置的指針(二維情況下)。若無需返回,此值設為 NULL。
  • mask,可選的掩膜操作,非零掩碼元素用於標記待統計元素,需要與輸入圖像集有相同尺寸。

 

代碼示例:

#include<opencv.hpp> #include<iostream> #include<string>
using namespace std; using namespace cv; int main() { Mat src = imread("C:/Users/齊明洋/Desktop/證件照/6.jpg"); imshow("src", src); 
//通道分離 vector
<Mat>images; split(src, images);
//計算各通道直方圖,並進行統計
//https://www.cnblogs.com/bjxqmy/p/12378312.html vector
<Mat>bgr(3); int channels[] = { 0,1,2 }; int histsize[] = { 10,10,10 }; float r[] = { 0,255 }; const float *ranges[] = { r,r,r }; Scalar colors[] = { Scalar(255,0,0),Scalar(0,255,0),Scalar(0,0,255) }; string names[] = { "藍色通道","綠色通道","紅色通道" }; for (int i = 0; i < 3; i++) { calcHist(&src, 3, &channels[i], Mat(), bgr[i], 1, &histsize[i], &ranges[i], true); normalize(bgr[i], bgr[i], 1, 0, NORM_L1);//https://www.cnblogs.com/bjxqmy/p/12292421.html
double mx, mn; Point pmx, pmn; minMaxLoc(bgr[i], &mn, &mx, &pmn, &pmx); double width = 255.0 / histsize[i]; cout << names[i] << endl; cout << "數量最少的顏色范圍:[" << pmn.y*width << "," << (pmn.y + 1)*width << "] 占比:" << mn * 100 << "%" << endl; cout << "數量最多的顏色范圍:[" << pmx.y*width << "," << (pmx.y + 1)*width << "] 占比:" << mx * 100 << "%" << endl; cout << endl; imshow(names[i], images[i]); } waitKey(0); }

效果演示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM