OpenCV minMaxLoc()函数找出图像中最小值最大值

这篇具有很好参考价值的文章主要介绍了OpenCV minMaxLoc()函数找出图像中最小值最大值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV 找出图像中最小值最大值函数minMaxLoc的使用
功能:从一个矩阵中找出全局的最大值和最小值。

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

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

1 函数解析

1.1 函数原型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:InputArray类型的src,输入单通道数组(图像)。
参数2double*类型的minVal,返回最小值的指针。若无须返回,此值置为NULL。
参数3double*类型的maxVal,返回最大值的指针。若无须返回,此值置为NULL。
参数4:Point*类型的minLoc,返回最小位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数5:Point*类型的maxLoc,返回最大位置的指针(二维情况下)。若无须返回,此值置为NULL。
参数6:InputArray类型的mask,用于选择子阵列的可选掩膜。

1.2 函数原型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))。

1.2 函数原型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.

2 示例

对"lena.png"图像进行三通道分离,
找出每个通道颜色的最小值和最大值
minmaxloc,opencv,计算机视觉,人工智能,算法

#include<opencv.hpp>
#include<iostream>
#include<string>
using namespace std;
using namespace cv;
int main() {
    Mat src = imread("lena.png");
    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);
}

minmaxloc,opencv,计算机视觉,人工智能,算法
minmaxloc,opencv,计算机视觉,人工智能,算法文章来源地址https://www.toymoban.com/news/detail-714543.html

到了这里,关于OpenCV minMaxLoc()函数找出图像中最小值最大值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【SQL开发实战技巧】系列(二十三):数仓报表场景☞ 如何对数据排列组合去重以及通过如何找到包含最大值和最小值的记录这个问题再次用执行计划给你证明分析函数性能不一定高

    【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事 【SQL开发实战技巧】系列(二):简单单表查询 【SQL开发实战技巧】系列(三):SQL排序的那些事 【SQL开发实战技巧】系列(四):从执行计划讨论UNION ALL与空字符串UNION与OR的使用注意事项 【SQL开发实战技巧】系列

    2023年04月10日
    浏览(51)
  • 定义一个5*5的矩阵(二维数组),赋上初值,通过调用函数实现:将数组中的最大值放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),在主函数中输出变换后的数组。

    程序代码: #includestdio.h int min(int (*a)[5]) {    int i,j,*min,t;    min=a;    for(i=0;i5;i++)    for(j=0;j5;j++)    {    if(*(a[i]+j)*min)     min=(a[i]+j);        //交换地址     }     t=*min;     *min=*(a[0]+0);     *(a[0]+0)=t;         for(i=0;i5;i++)    for(j=0;j5;j++)    {    if(i==0j==0) continue; 

    2024年01月24日
    浏览(48)
  • Java8中Stream流求最大值最小值

    1. stream().reduce()实现 2. stream().max()或stream().min()实现 1. stream().reduce()实现 2. Collectors.summarizingInt()实现 3. stream().max()或stream().min()实现 1. stream().reduce()实现 2. Collectors.summarizingLong()实现 3. stream().max()或stream().min()实现 1. stream().reduce()实现 2. Collectors.summarizingLong()实现 3. stream().max(

    2024年01月17日
    浏览(15)
  • 获取List集合中的最大值和最小值

    获取List集合中的最大值和最小值

    实现获取List集合中的最大值和最小值共有以下两种方式,根据自己的场景选择合适的方法。 目录 Collections 1、String、Integer、Double类型 2、对象类型 排序 1、Integer类型 2、 基本排序方式: 1、String、Integer、Double类型 当List中元素为String、Integer、Double类型时,可以使用 Collectio

    2024年02月04日
    浏览(19)
  • ArcGIS中查看栅格影像最大值最小值的位置

    ArcGIS中查看栅格影像最大值最小值的位置

    如果只是想大概获取栅格影像中最大值最小值的位置进行查看,可以不用编写程序获取具体的行列信息,只需要利用分类工具即可。 假设有一幅灰度影像数据,如下图所示。 想要查看最大值2116的大概位置在哪里,可以右击选择图层属性,首先选择符号系统,唯一值计算栅格

    2024年02月21日
    浏览(17)
  • 数据结构:求一维数组中的最大值最小值

    数据结构:求一维数组中的最大值最小值

    思路: 对于一维数组中的元素,赋max,min的初值为数组的第一个元素,然后将数组中剩余的元素依次和max值最小值比较。 代码: 分析:该算法的最好、最坏和平均情况下的元素比较次数分别为n-1,2(n-1),3(n-1)/2 该算法的时间最主要花费在元素的比较上。最好情况是a中元素呈

    2024年02月07日
    浏览(20)
  • Python如何求出矩阵中的最大值最小值以及所在的位置

    Python如何求出矩阵中的最大值最小值以及所在的位置

    想着记录下来吧,代码小白,一点一点来。 题目简述:有个50x53的矩阵G,第53列是每一行的总和,目的是求出第53列的最小值,并输出最小值所在行的所有元素。 因为要根据第52列来找出最小值,调用min()函数便能求出最小值; min = G[:,52].min() 结果为13561.0,发现对应的是矩

    2024年02月12日
    浏览(16)
  • sql server 求多个字段中的最小值和最大值

    sql server 求多个字段中的最小值和最大值

    程序代码园发文地址: sql server 求多个字段中的最小值和最大值-程序代码园 小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,sql server 求多个字段中的最小值和最大值 http://www.byqws.com/blog/2143.html      今天在工作中,遇到一个需求,需要把最近6个月的出库数据,去掉一个

    2024年01月20日
    浏览(15)
  • 使用SQL 统计表最大值,最小值,平均值,中位数值

    问:有一个postgres数据表,表中有update_time, create_time关于时间戳的字段,选择某个时间段,计算出update_time减去create_time的值做为耗时时间的字段duration_time,统计出在这段时间内耗时时间的平均值,中位数值,最大值,和最小值,请问如何通过sql语句实现此统计? 答:您好!

    2024年02月14日
    浏览(11)
  • 任意给定 n 个整数,求这 n 个整数序列的和、最小值、最大值

    任意给定 n 个整数,求这 n 个整数序列的和、最小值、最大值

    编程思路是: 1.先创建并初始化min(最小值),max(最大值),sum(和),n(即将输入的n个整数的范围),a(用户输入的数字,a1,a2,a3) 2.cin读入用户输入的范围n,并cout一段文字提示用户 3.用for循环,录入小于n次的a的数据,用户可用空格或回车换行输入之后的文字(可以在循环

    2024年02月07日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包