使用OpenCV-Python的函数minMaxLoc()应该注意的两点
Posted 昊虹图像算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用OpenCV-Python的函数minMaxLoc()应该注意的两点相关的知识,希望对你有一定的参考价值。
OpenCV中的函数minMaxLoc()用于找出矩阵中的最大值和最小值,并且给出它们中的坐标。
函数原型如下:
C++原型有两个,分别如下:
C++原型一:
void cv::minMaxLoc ( InputArray src,
double * minVal,
double * maxVal = 0,
Point * minLoc = 0,
Point * maxLoc = 0,
InputArray mask = noArray()
)
参数意义如下:
src—输入矩阵,要求是单通道的图像,即二维的矩阵。
minVal—矩阵中的最小值。
maxVal—矩阵中的最大值。
minLoc—矩阵中的最小值的坐标。
maxLoc—矩阵中的最大值的坐标。
mask—掩模矩阵。
C++原型二:
void cv::minMaxLoc ( const SparseMat & a,
double * minVal,
double * maxVal,
int * minIdx = 0,
int * maxIdx = 0
)
参数意义如下:
a—输入矩阵,要求是单通道的图像,即二维的矩阵。
minVal—矩阵中的最小值。
maxVal—矩阵中的最大值。
minIdx—矩阵中最小值的坐标。
maxIdx—矩阵中最大值的坐标。
Python原型如下:
minVal, maxVal, minLoc, maxLoc = cv.minMaxLoc( src[, mask] )
参数意义如下:
src—输入矩阵,要求是单通道的图像,即二维的矩阵。
minVal—矩阵中的最小值。
maxVal—矩阵中的最大值。
minLoc—矩阵中的最小值的坐标。
maxLoc—矩阵中的最大值的坐标。
mask—掩模矩阵。
使用中需注意以下两点:
1 矩阵只能是一维或二维的矩阵,如果是二维以上的矩阵,需要先进行降维处理,比如使用函数reshape()完成,reshape()函数的使用方法可参见下面这篇我的博文:
https://blog.csdn.net/wenhao_ir/article/details/123514750
2 其返回的坐标是列在前,行在后,而不是行在前,列在后,实例如下面的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
# 图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601
# OpenCV的版本为4.1
import cv2 as cv
import numpy as np
# 新建矩阵array
array = np.array([1, 2, 3, 4, 5, 6, 10, 7, 8, 9, 10, 0])
# 将array调整为3*4的单通道图像
img1 = array.reshape((3, 4))
minval_1, maxval_1, minloc_1, maxloc_1 = cv.minMaxLoc(img1)
temp1 = img1[2, 1]
temp2 = img1[1, 2]
print('图像img1中最小值为:, 其位置为:' .format(minval_1, minloc_1))
print('图像img1中最大值为:, 其位置为:' .format(maxval_1, maxloc_1))
运行结果如下图所示:
而矩阵img1的内容如下图所示:
可以看出,如果按行在前,列在后,其最小点的坐标应该为(2,3),而不是运行结果中的(3,2),这一点大家在使用中应该特别注意。
以上是关于使用OpenCV-Python的函数minMaxLoc()应该注意的两点的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV-Python 图像平滑处理2:blur函数及滤波案例
OpenCV-Python 图像平滑处理2:blur函数及滤波案例
OpenCV-Python 图像平滑处理3:boxFilter函数详解及均值滤波案例