C++:opencv获取矩阵中的最大最小值--cv::minMaxLoc

cv::minMaxLoc 是 OpenCV 中一个用于计算图像或矩阵中最小值和最大值的函数。它可以用来查找数组中的最小值和最大值及其位置,这在图像处理和计算机视觉任务中非常有用。

函数原型

cpp 复制代码
void cv::minMaxLoc(
    const cv::InputArray& src,
    double* minVal = nullptr,
    double* maxVal = nullptr,
    cv::Point* minLoc = nullptr,
    cv::Point* maxLoc = nullptr,
    const cv::InputArray& mask = cv::noArray()
);

参数解释

  1. src:

    • 类型 : cv::InputArray
    • 描述 : 输入图像或矩阵。该参数表示需要计算最小值和最大值的源数据。可以是 cv::Mat 类型的图像或矩阵。
  2. minVal:

    • 类型 : double*(可选)
    • 描述 : 指向存储最小值的变量的指针。如果传递了这个指针,函数将把最小值存储到这个变量中。如果不需要最小值,可以传递 nullptr
  3. maxVal:

    • 类型 : double*(可选)
    • 描述 : 指向存储最大值的变量的指针。如果传递了这个指针,函数将把最大值存储到这个变量中。如果不需要最大值,可以传递 nullptr
  4. minLoc:

    • 类型 : cv::Point*(可选)
    • 描述 : 指向存储最小值位置的变量的指针。如果传递了这个指针,函数将把最小值的位置(坐标)存储到这个变量中。如果不需要最小值的位置,可以传递 nullptr
  5. maxLoc:

    • 类型 : cv::Point*(可选)
    • 描述 : 指向存储最大值位置的变量的指针。如果传递了这个指针,函数将把最大值的位置(坐标)存储到这个变量中。如果不需要最大值的位置,可以传递 nullptr
  6. mask:

    • 类型 : cv::InputArray(可选)
    • 描述 : 可选的掩模图像,用于指定在计算最小值和最大值时要考虑的区域。掩模图像是一个与源图像相同尺寸的二值图像,其中白色(255)的位置表示要考虑的区域,黑色(0)的位置表示忽略的区域。如果不使用掩模,可以将其设置为 cv::noArray()

函数功能

cv::minMaxLoc 函数计算给定图像或矩阵中的最小值和最大值,并可以选定地返回它们的位置(坐标)。它的主要功能是:

  • 查找最小值和最大值: 计算输入图像或矩阵中像素值的最小和最大值。
  • 确定位置: 计算这些最小值和最大值的位置(坐标),有助于进一步的分析和处理。

示例代码

以下是一个示例,展示如何使用 cv::minMaxLoc 查找图像中的最小值和最大值及其位置:

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    // 创建一个示例图像
    cv::Mat img = (cv::Mat_<uchar>(3, 3) << 10, 20, 30, 40, 50, 60, 70, 80, 90);

    // 定义变量存储结果
    double minVal, maxVal;
    cv::Point minLoc, maxLoc;

    // 计算最小值、最大值及其位置
    cv::minMaxLoc(img, &minVal, &maxVal, &minLoc, &maxLoc);

    // 输出结果
    std::cout << "Minimum Value: " << minVal << std::endl;
    std::cout << "Maximum Value: " << maxVal << std::endl;
    std::cout << "Minimum Location: (" << minLoc.x << ", " << minLoc.y << ")" << std::endl;
    std::cout << "Maximum Location: (" << maxLoc.x << ", " << maxLoc.y << ")" << std::endl;

    return 0;
}

解释

  1. 创建图像:

    • 使用 cv::Mat 创建一个简单的 3x3 矩阵,作为示例图像。
  2. 计算最小值和最大值:

    • 调用 cv::minMaxLoc 计算图像中的最小值和最大值,并获取它们的位置。
  3. 输出结果:

    • 打印最小值、最大值及其位置。

总结

  • 功能 : cv::minMaxLoc 用于计算图像或矩阵中的最小值和最大值,并返回它们的位置。
  • 参数: 输入图像、最小值和最大值的存储变量、最小值和最大值的位置的存储变量、可选掩模。
  • 应用: 用于图像分析、数据统计和处理等任务,特别是在需要了解图像中像素值的范围和分布时。
相关推荐
艾莉丝努力练剑3 小时前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
还债大湿兄4 小时前
《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
c++·qt·mfc
千宇宙航6 小时前
闲庭信步使用图像验证平台加速FPGA的开发:第十四课——图像二值化的FPGA实现
图像处理·计算机视觉·fpga开发
橡晟6 小时前
深度学习入门:让神经网络变得“深不可测“⚡(二)
人工智能·python·深度学习·机器学习·计算机视觉
倔强青铜37 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
PyAIExplorer7 小时前
图像亮度调整的简单实现
人工智能·计算机视觉
u_topian7 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
珊瑚里的鱼8 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上8 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt
xingshanchang8 小时前
Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
开发语言·matlab