首页 > 其他分享 >OpenCV(cv::minMaxLoc())

OpenCV(cv::minMaxLoc())

时间:2024-10-10 22:23:10浏览次数:6  
标签:掩膜 最大值 minMaxLoc OpenCV 最小值 图像 cv

目录



cv::minMaxLoc() 是 OpenCV 库中用于查找数组或图像中最小值和最大值及其位置的函数。



1. 函数定义

void cv::minMaxLoc(
    InputArray src,
    double* minVal = nullptr,
    double* maxVal = nullptr,
    Point* minLoc = nullptr,
    Point* maxLoc = nullptr,
    InputArray mask = noArray()
)

参数:

  • src: 输入数组,可以是单通道或多通道的 CV_8UCV_32FCV_64F 类型的图像或矩阵。

  • minVal: 指向 double 类型变量的指针,用于存储找到的最小值。如果不需要最小值,可以传入 nullptr

  • maxVal: 指向 double 类型变量的指针,用于存储找到的最大值。如果不需要最大值,可以传入 nullptr

  • minLoc: 指向 Point 类型变量的指针,用于存储最小值的位置(坐标)。如果不需要位置,可以传入 nullptr

  • maxLoc: 指向 Point 类型变量的指针,用于存储最大值的位置(坐标)。如果不需要位置,可以传入 nullptr

  • mask: 可选的掩膜数组,类型必须与 src 相同。如果提供了掩膜,则函数只会在掩膜非零的区域内查找最小值和最大值。默认情况下,掩膜为全1,即整个输入数组都参与查找。

返回值:

cv::minMaxLoc() 没有返回值,结果通过指针参数返回。



2. 示例代码

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

#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    // 读取灰度图像
    cv::Mat img = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE);
    if (img.empty())
    {
        std::cerr << "无法读取图像文件!" << std::endl;
        return -1;
    }

    double minVal, maxVal;
    cv::Point minLoc, maxLoc;

    // 查找最小值和最大值及其位置
    cv::minMaxLoc(img, &minVal, &maxVal, &minLoc, &maxLoc);

    std::cout << "最小值: " << minVal << " 位置: (" << minLoc.x << ", " << minLoc.y << ")" << std::endl;
    std::cout << "最大值: " << maxVal << " 位置: (" << maxLoc.x << ", " << maxLoc.y << ")" << std::endl;

    // 可视化最小值和最大值的位置
    cv::Mat imgColor;
    cv::cvtColor(img, imgColor, cv::COLOR_GRAY2BGR);
    cv::circle(imgColor, minLoc, 5, cv::Scalar(255, 0, 0), -1); // 蓝色标记最小值
    cv::circle(imgColor, maxLoc, 5, cv::Scalar(0, 0, 255), -1); // 红色标记最大值

    cv::imshow("MinMaxLoc", imgColor);
    cv::waitKey(0);

    return 0;
}

示例说明:

  1. 读取图像:使用 cv::imread 以灰度模式读取图像。

  2. 调用 minMaxLoc:传入图像,获取最小值、最大值及其位置。

  3. 输出结果:将最小值和最大值及其位置输出到控制台。

  4. 可视化:在图像上用不同颜色的圆圈标记最小值和最大值的位置,并显示图像。



3. 掩膜的使用

掩膜允许在指定区域内查找最小值和最大值。以下示例展示如何在图像的特定区域内查找最小值和最大值:

// 创建一个与图像大小相同的掩膜,初始为0
cv::Mat mask = cv::Mat::zeros(img.size(), CV_8U);

// 定义掩膜区域,例如一个圆形区域
cv::circle(mask, cv::Point(img.cols / 2, img.rows / 2), 100, cv::Scalar(255), -1);

// 查找掩膜区域内的最小值和最大值
cv::minMaxLoc(img, &minVal, &maxVal, &minLoc, &maxLoc, mask);

// 输出结果
std::cout << "掩膜区域内最小值: " << minVal << " 位置: (" << minLoc.x << ", " << minLoc.y << ")" << std::endl;
std::cout << "掩膜区域内最大值: " << maxVal << " 位置: (" << maxLoc.x << ", " << maxLoc.y << ")" << std::endl;

示例说明:

  1. 创建掩膜:创建一个与图像大小相同的单通道掩膜,并在其中绘制一个圆形区域作为有效区域。

  2. 调用 minMaxLoc:传入掩膜,只在掩膜为非零的区域内查找最小值和最大值。

  3. 输出结果:输出掩膜区域内的最小值和最大值及其位置。



4. 注意事项

  1. 多通道图像:cv::minMaxLoc() 只处理单通道图像。如果输入是多通道图像,需要先将其转换为单通道,例如使用 cv::cvtColor

  2. 掩膜类型:掩膜必须是 8 位单通道图像 (CV_8U),非零的像素表示有效区域。

  3. 性能考虑:对于大尺寸图像或需要频繁调用的场景,可以考虑优化掩膜的创建或提前处理图像,以提高性能。

  4. 精度:最小值和最大值的位置如果存在多个相同的值,cv::minMaxLoc() 返回第一个找到的位置。



5. 应用场景

  • 模板匹配:在模板匹配过程中,可以使用 minMaxLoc() 查找匹配结果中的最佳匹配位置。

  • 图像阈值处理:确定图像的动态范围,以选择合适的阈值。

  • 特征检测:在某些特征检测算法中,需要找到响应值的最大或最小位置。

  • 图像分析:分析图像的亮度分布,识别亮点或暗点。



标签:掩膜,最大值,minMaxLoc,OpenCV,最小值,图像,cv
From: https://www.cnblogs.com/keye/p/18442230

相关文章

  • 《大侠立志传》游戏闪退未响应提示“找不到cv210.dll”文件该怎么处理?大侠立志传游戏
    《大侠立志传》以其丰富的剧情和独特的玩法吸引着众多玩家。然而,启动游戏时若出现闪退未响应且提示“找不到cv210.dll”文件,着实令人苦恼。遇到这种情况该如何处理呢?下面为大家提供解决办法。cv210.dll的功能介绍cv210.dll是VisualC++RedistributablePackage的一部分,特别......
  • OOOPS:零样本实现360度开放全景分割,已开源 | ECCV'24
    全景图像捕捉360°的视场(FoV),包含了对场景理解至关重要的全向空间信息。然而,获取足够的训练用密集标注全景图不仅成本高昂,而且在封闭词汇设置下训练模型时也受到应用限制。为了解决这个问题,论文定义了一个新任务,称为开放全景分割(OpenPanoramicSegmentation,OPS)。在该任务中,模型在......
  • 视频汇聚平台EasyCVR支持云端录像丨监控存储丨录像回看丨录像计划丨录像配置
    EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。平台以其强大的视频处理、汇聚与融合能力,在构建视频监控系统中展现出了独特的优势。EasyCVR视频汇聚平台可接入传统监控行业中高清网络摄像机的RTSP直播流,及RTMP、HTTP-FLV、HLS(......
  • 机器学习:opencv--图像拼接
    目录前言一、两个函数1.显示图像2.计算图片特征与描述符二、代码实例1.准备图像2.特征检测3.特征匹配4.图像变换5.图像融合前言图像拼接是一种将多张图像合成一幅大图的技术,常用于全景图生成、图像拼接和图像合成等应用场景。 一、两个函数1.显示图像defcv......
  • opencv图片的二值化操作
            在图像处理领域中,二值化操作是一种非常基础且重要的技术。它将灰度图像或彩色图像转换为仅包含两种像素值的图像,即黑色和白色(或者更一般地说,前景和背景)。这种操作在处理图像时极大地简化了图像数据的复杂度,使得后续的图像分析和处理步骤变得更加高效和直观。......
  • AI+视频监控:EasyCVR安防平台赋能火电制造行业的视频智能管理方案
    随着信息技术的飞速发展和智能制造的深入推进,火电制造行业作为国民经济的重要组成部分,正面临着智能化转型的迫切需求。为了提升生产效率、保障设备安全、优化管理流程,火电制造企业迫切需要引入先进的视频监控与人工智能技术。EasyCVR安防监控平台凭借其强大的视频汇聚、智能分析和......
  • pgadmin4敏感信息泄露 CVE-2024-9014
    0x01产品描述:        pgAdmin是全球最先进的开源数据库Postgres的领先开源管理工具。 pgAdmin4旨在满足新手和经验丰富的Postgres用户的需求,提供了强大的图形界面,可简化数据库对象的创建,维护和使用。其可以在Linux,Unix,macOS和Windows上使用,以管理PostgreSQL和EDBA......
  • 在Ubuntu上通过源码安装OpenCV和OpenCVSharp
    OpenCVOpenCV(OpenSourceComputerVisionLibrary)是一个开源计算机视觉和机器学习软件库。以下是OpenCV的一些主要特性:主要特性功能丰富:OpenCV提供了超过2500个优化的算法,包括图像处理、特征检测、物体识别、面部识别、图像分割、运动分析等。跨平台:支持Windows、Linux......
  • CVE-2021-41773目录穿越漏洞复现并利用得到flag
    前提概要首先!遇到一道题目,根据题意可知:这道题目存在CVE-2021-41773漏洞。​先来了解一下CVE-2021-41773的漏洞原理:漏洞原理CVE-2021-41773是一个影响ApacheHTTPServer(httpd)的安全漏洞,影响版本为2.4.49版本。它是一个路径遍历漏洞,如果文档根目录以外的文件不受requi......
  • ICMP timestamp请求响应漏洞CVE-1999-0524解决方法
    ICMPtimestamp请求响应漏洞CVE-1999-0524解决方法1、添加进和出的规则firewall-cmd--permanent--direct--add-ruleipv4filterINPUT0-pICMP--icmp-typetimestamp-request-mcomment--comment"denyICMPtimestamp"-jDROPfirewall-cmd--permanent--direct--ad......