首页 > 编程笔记 > C++笔记 阅读:37

OpenCV minMaxLoc()函数的用法(附带实例)

全局函数 minMaxLoc() 用于寻找数组中的最大值和最小值及其位置。该极值检测会遍历整个矩阵,当掩码为空时,遍历指定的特殊区域。

注意,minMaxLoc() 函数不适用于多通道阵列。如果需要在所有通道中查找最小元素或最大元素,首先使用 Mat::reshape() 将数组重新解释为单个通道,或者使用 extractImageCOI()、mixChannels() 或 split() 提取特定通道。

函数 minMaxLoc() 声明如下:
void cv::minMaxLoc (InputArray  src, double * minVal, double * maxVal = 0, Point *minLoc = 0, Point * maxLoc = 0, InputArray mask = noArray() );
参数说明如下:
【实例】计算单通道、多通道图像的最大值。
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。

2) 在 IDE 中打开 main.cpp,输入如下代码:
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main()
{
    Mat image, image_3c;
    image.create(Size(256, 256), CV_8UC1);
    image_3c.create(Size(256, 256), CV_8UC3);    // 三通道的图像
    image.setTo(0);
    image_3c.setTo(0);

    image.at<uchar>(10, 200) = 255;    // 第10行、第200列处赋值255
    image_3c.at<uchar>(10, 200) = 255; // 第10行、第200列处赋值

    double maxVal = 0;  // 最大值一定要赋初值,否则运行时会报错
    Point maxLoc;
    minMaxLoc(image, NULL, &maxVal, NULL, &maxLoc);
    qDebug() << "单通道图像最大值:" << maxVal;

    double min_3c, max_3c;
    minMaxLoc(image_3c, &min_3c, &max_3c, NULL, NULL);
    qDebug() << "3 通道图像最大值:" << max_3c;

    imshow("image", image);
    imshow("image_3c", image_3c);
    waitKey(0);
    return 0;
}
在上述代码中,我们利用全局函数 minMaxLoc() 查找了单通道和多通道矩阵中的像素最大值。

注意,多通道在使用 minMaxLoc() 函数时不能给出其最大值和最小值坐标,因为每个像素点有多个坐标,所以无法给出。

3) 保存工程并运行,结果如下:

单通道图像最大值:255
3 通道图像最大值:255

相关文章