功能:从一个矩阵中找出全局的最大值和最小值。

函数cv::minMaxLoc找出最大和最小元素的值和他们的位置。极值是遍历整个矩阵找到,或者当掩码不是一个空矩阵时,是通过遍历指定矩阵区域找到。

函数不适用于多通道矩阵,如果需要遍历所有的通道来找到最大和最小值,首先使用函数Mat::reshape转换为单通道矩阵。或者你可以使用函数 extractImageCOI ,mixChannels , or split 来提取特定通道。

函数原型1:

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

参数说明:

  • 参数1 src 输入单通道矩阵.

  • 参数1 minVal 返回最小值的指针; 如果不需要输入NULL.

  • 参数 maxVal 返回最大值的指针; 如果不需要输入NULL.

  • 参数 minLoc 返回最小值位置的指针 (二维情况下); 如果不需要输入NULL.

  • 参数 maxLoc 返回最大值位置的指针 (二维情况下); 如果不需要输入NULL.

  • 参数 mask 可选参数,用于选择一个子矩阵.

  • 参考 max, min, compare, inRange, extractImageCOI, mixChannels, split, Mat::reshape

函数原型2:

CV_EXPORTS void minMaxIdx(InputArray src, double* minVal, double* maxVal = 0,int* minIdx = 0, int* maxIdx = 0, InputArray mask = noArray());

参数说明:

  • 参数1 src 输入单通道矩阵.

  • 参数1 minVal 返回最小值的指针; 如果不需要输入NULL.

  • 参数 maxVal 返回最大值的指针; 如果不需要输入NULL.

  • 参数 minIdx 返回最小值位置的指针 ((n维情况下); 如果不需要输入NULL. 否则,它必须指向src.dims元素的一个矩阵, 每个维度里最小元素的坐标按顺序存储.

  • 参数 maxIdx 返回最大值位置的指针 ((n维情况下); 如果不需要输入NULL.

  • 参数 mask 指定矩阵区域.

注意:

在稀疏矩阵中,最小值是只能在非零元素中找到。

当minIdx 不是NULL的时候,他必须有至少两个元素(同maxIdx),即使src是一个单行或者单列矩阵。在OpenCV (跟随MATLAB)中每个矩阵至少要有两个维度。单列矩阵是Mx1 矩阵(因此 minIdx/maxIdx将是(i1,0)/(i2,0)),单行矩阵是 1xN矩阵(因此minIdx/maxIdx 将是(0,j1)/(0,j2))。

函数原型3:

CV_EXPORTS void minMaxLoc(const SparseMat& a, double* minVal,double* maxVal, int* minIdx = 0, int* maxIdx = 0);
 

参数说明:

  • 参数1 a 输入单通道矩阵.

  • 参数2 minVal 返回最小值的指针; 如果不需要输入NULL.

  • 参数3 maxVal 返回最大值的指针; 如果不需要输入NULL.

  • 参数4 minIdx 返回最小值位置的指针 ((n维情况下); 如果不需要输入NULL. 否则,它必须指向src.dims元素的一个矩阵, 每个维度里最小元素的坐标按顺序存储.

  • 参数5 maxIdx 返回最大值位置的指针 ((n维情况下); 如果不需要输入NULL.

代码示例:

#include <iostream>
#include <opencv2/opencv.hpp>
​
int main()
{// std::cout << "Hello World!\n";cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");cv::Mat image_re = image.reshape(1);double minValue, maxValue;    // 最大值,最小值cv::Point  minIdx, maxIdx;    // 最小值坐标,最大值坐标     cv::minMaxLoc(image_re, &minValue, &maxValue, &minIdx, &maxIdx);std::cout << "最大值:" << maxValue <<"最小值:"<<minValue<<std::endl;std::cout << "最大值位置:" << maxIdx << "最小值位置:" << minIdx;cv::waitKey(0);
​
}

运行结果如下

Mat类的函数reshape

功能:不用拷贝数据转换一个2维矩阵的形状或通道的个数

函数为这些元素制造了一个新的矩阵头,新的矩阵可能会有不同的大小或不同的通道数,如果满足下面条件任何组合都有可能:

  • 没有额外的元素被包含进去新矩阵,也没有元素被排除。所以结果的行数、列数、通道数必须在转换后保持不变。

  • 没有数据拷贝,也就是说这是个 O(1)操作。因此,如果你改变了行的个数,或者操作以其他方式改变了元素行的指数,矩阵必须是连续的,参考:Mat::isContinuous

    例如:假如有一些3维的点的集合存储在一个STL vector中,你想用一个3xN矩阵表示这些点,按下面这样做:

    std::vector<Point3f> vec;...Mat pointMat = Mat(vec). // convrt vector to Mat, O(1) operationreshape(1). // make Nx3 1-channel matrix out of Nx1 3-channel.// Also, an O(1) operationt(); // finally, transpose the Nx3 matrix.// This involves copying all the elements

    函数原型1:

    Mat reshape(int cn, int rows=0) const;

    参数说明:

  • 参数1 cn 新通道数.如果参数是0,通道数保持不变.

  • 参数2 rows 新通道行数. 如果参数是0,行数保持不变.

函数原型2:

Mat reshape(int cn, int newndims, const int* newsz) const;

函数原型3:

Mat reshape(int cn, const std::vector<int>& newshape) const;

OpenCV 找出图像中最小值最大值函数minMaxLoc的使用相关推荐

  1. opencv(10) OpenCV 找出图像中最小值最大值函数minMaxLoc

    参数说明: 参数1 a 输入单通道矩阵. 参数2 minVal 返回最小值的指针; 如果不需要输入NULL. 参数3 maxVal 返回最大值的指针; 如果不需要输入NULL. 参数4 minIdx ...

  2. python找出矩阵中的最大值_Python例题:找到并输出矩阵中的最大值

    早就听说Python是一门很强大的语言,不过一直没有什么机会去学.直到前一段时间我的技术群里有人问我了一道Python的题目,本着帮助他人.充实自己的想法,我二话不说就去查找资料,做出了这道题.也算是 ...

  3. 编写一个汇编语言程序,完成以下要求。从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元

    编写一个汇编语言程序,完成以下要求.从BUF单元处定义有10个带符号字数据:-1,3,24,94,62,72,55,0,-48,99,试找出他们中的最大值和平均值,并以此分别存放至该数据区的后两个单元 ...

  4. python取出字典中最大值_python找出字典中value最大值的几种方法

    假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...

  5. python字典找出年龄最大的人_python找出字典中value最大值的几种方法

    假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...

  6. Java基础。用户输入4个整数存放到数组中,通过代码找出数组中的最大值和最小值

    import java.util.Scanner;public class Test11 {public static void main(String[] args) {int[] array = ...

  7. python找出矩阵中的最大值_Python / Scipy:找到矩阵的“有界”最小值/最大值

    我认为指出我的问题最简单,一般情况很难解释. 说我有一个矩阵 a with dimensions NxMxT, 人们可以将T视为时间维度(使问题更容易).设(n,m)为通过NxM的指数.我可以调用(n ...

  8. OpenCV 检测出图像中的“对号”

    测试图片: 测试结果: int main(int argc, char* argv[]) {IplImage* src , *srcContours ,*srcHErode,*srcVErode ,* ...

  9. 找出数组中最大值次大值的一次遍历方法(C++)

    写在前面 昨天做了一道LeetCode题(747. 至少是其他数字两倍的最大数 - 力扣(LeetCode) (leetcode-cn.com)), 大致意思是找出数组中的最大值和次大值并返回最大值索 ...

最新文章

  1. 解决流程自动化“最后一公里问题”,达观数据发布智能 RPA
  2. 智能计米器jk76怎么安装_智能电视怎么安装软件?详细教程一学就会
  3. python 求list最小值的索引_【挑战自学Python编程】第六天:前五天都学了啥?
  4. nodejs接收get请求参数
  5. 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  6. 导出MySql中的数据库 --Linux/Windows
  7. 总结:JavaEE完整体系架构
  8. 其他——[转]从实现iPhone的OAuth封装看国内互联网和开放平台
  9. bzoj 1706: [usaco2007 Nov]relays 奶牛接力跑(倍增floyd)
  10. mysql高级管理-note
  11. Scrum板与Kanban如何抉择?ecusiqoiw板与按照eqymgy
  12. 如何获取目标期刊的参考文献格式模板?
  13. 【ATSC】 为什么选择ATSC 3.0
  14. 注册gmail邮件,遇到“此电话号码无法用于进行验证”该怎么办
  15. PDF带目录导出java_itextpdf为pdf文件添加目录(可跳转)
  16. .NET(C#):await返回Task的async方法
  17. 2023京东年货节全民炸年兽活动最详细规则
  18. IPv6接口自动配置的地址数量
  19. 手把手教你提升抖音直播间人气、流量的6个技巧
  20. js 将日期转换成时间戳

热门文章

  1. 武汉大学计算机学院跳楼,武汉大学一男生跳楼身亡,自杀原因反思:徒劳教育往往跟父母有关...
  2. 在Ubuntu下从Python连接到Microsoft SQL Server数据库
  3. Jmeter——Jmeter之命令行测试
  4. ArcMap中的各种GIS文件的变换(img转tif,tif坐标系转换,shp坐标系转换)
  5. AG7120与AG7220做HDMI信号延长放大器驱动方案讲解|AG7120与AG7220设计HDMI信号延长放大器电路参考
  6. 【C++】C++静态库和动态库的区别
  7. 【Java中的构造器(构造方法)_基本语法_详细解读】
  8. 项目管理理论和实施方法论的关系是什么?
  9. flush=true 的含义
  10. 正则校验必须由数字 字母 和 特殊符号组成的正则