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

参数说明:

参数1 a 输入单通道矩阵.

参数2 minVal 返回最小值的指针; 如果不需要输入NULL.

参数3 maxVal 返回最大值的指针; 如果不需要输入NULL.

参数4 minIdx 返回最小值位置的指针 ((n维情况下); 如果不需要输入NULL. 否则,它必须指向src.dims元素的一个矩阵, 每个维度里最小元素的坐标按顺序存储.

参数5 maxIdx 返回最大值位置的指针 ((n维情况下); 如果不需要输入NULL.

参数6:InputArray类型的mask,用于选择子阵列的可选掩膜。

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

1.   坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。

2.        在使用image.at(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标,  即与image.at(Point(x2, x1))效果相同。

 3.      如果所画图像是多通道的,比如说image图像的通道数时n,则使用Mat::at(x, y)时,其x的范围依旧是0到image的height,而y的取值范围则是0到image的width乘以n,因为这个时候是有n个通道,所以每个像素需要占有n列。但是如果在同样的情况下,使用Mat::at(point)来访问的话,则这时候可以不用考虑通道的个数,因为你要赋值给获取Mat::at(point)的值时,都不是一个数字,而是一个对应的n维向量。

 4.      多通道图像在使用minMaxLoc()函数是不能给出其最大最小值坐标的,因为每个像素点其实有多个坐标,所以是不会给出的。因此在编程时,这2个位置应该给NULL。

你可能感兴趣的:(opencv,opencv)