当前位置:   article > 正文

利用OpenCV的函数minMaxLoc()获取图像中像素的最小值、最大值以及对应的坐标值

minmaxloc

函数minMaxLoc()的原型如下:
C++原型:

void cv::minMaxLoc(InputArray src,
                   double * minVal,
                   double * maxVal = 0,
                   Point * minLoc = 0,
                   Point * maxLoc = 0,
                   InputArray mask = noArray() )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Python原型:

minVal, maxVal, minLoc, maxLoc=cv.minMaxLoc(src[, mask])
  • 1

参数意义很简单,官方文档原文如下:
src—input single-channel array.
minVal—pointer to the returned minimum value; NULL is used if not required.
maxVal—pointer to the returned maximum value; NULL is used if not required.
minLoc—pointer to the returned minimum location (in 2D case); NULL is used if not required.
maxLoc—pointer to the returned maximum location (in 2D case); NULL is used if not required.
mask—optional mask used to select a sub-array.

要注意的是,
函数minMaxLoc()只能处理单通道的图像或矩阵,
如果大于了二维,
在Python中可以用函数reshape()先把矩阵形状进行调整,再使用函数minMaxLoc(),关于函数reshape()的详细介绍大家可以参考博文:https://www.hhai.cc/thread-155-1-1.html
OpenCV-C++中则可以使用函数split()把各通道进行分离,再使用函数minMaxLoc(),当然Python环境下也可以这么做,关于函数split()的详细介绍,可以参考链接 https://www.hhai.cc/thread-151-1-1.html,另外OpenCV-C++环境下,还可以使用函数cv::extractChannel()单独抽取出某通道哦。

使用也很简单,大家一看示例代码就知道怎么用了。

C++示例代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

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

using namespace std;
using namespace cv;


int main()
{

	cv::Mat A1 = (cv::Mat_<uchar>(3, 3) << 1, 2, 3,
		6, 7, 8,
		11, 88, 13);

	cout << "A1中的数据为:\n" << A1 << endl << endl;

	double minval_1, maxval_1;
	Point minloc_1, maxloc_1;

	cv::minMaxLoc(A1, &minval_1, &maxval_1, &minloc_1, &maxloc_1);
	
	cout << "A1中的最小值为:\n" << minval_1 << endl << endl;
	cout << "A1中的最大值为:\n" << maxval_1 << endl << endl;
	
	cout << "A1中的最小值的位置为:\n" << minloc_1 << endl << endl;
	cout << "A1中的最大值的位置为:\n" << maxloc_1 << endl << endl;


	return(0);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

运行结果如下:
在这里插入图片描述

Python示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术

# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询

# OpenCV的版本为4.4.0

import numpy as np
import cv2 as cv

if __name__ == '__main__':
    A1 = np.array([[1, 2, 3],
                  [6, 7, 8],
                  [11, 88, 13]], dtype='int8')

    minval_1, maxval_1, minloc_1, maxloc_1 = cv.minMaxLoc(A1)
    print('A1中最小值为:{}, 其位置为:{}'.format(minval_1, minloc_1))
    print('A1中最大值为:{}, 其位置为:{}'.format(maxval_1, maxloc_1))

    # 关闭窗口
    cv.waitKey(0)
    cv.destroyAllWindows()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

运行结果如下:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/79134
推荐阅读
相关标签
  

闽ICP备14008679号