坐标体系认知

1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。(虽然网上有学着说OpenCV中有些数据结构的坐标原点是在图片的左下角,但是我暂时还没碰到过)。

  2. 在使用image.at<TP>(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at<TP>(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。

minmaxloc(src,*minval,*maxval,*minloc,maxloc,mask);(求取特定图像区间最大值与最小值)

src – Source single-channel array.
输入的单通道矩阵。
minVal – Pointer to the returned minimum value. NULL is used if not required.
指向返回的最小值的指针。NULL为不要求。
maxVal – Pointer to the returned maximum value. NULL is used if not required.
指向返回的最大值的指针。NULL为不要求。
minLoc – Pointer to the returned minimum location (in 2D case). NULL is used if not required. 指向返回最小值的位置(2d情况下),NULL为不要求
maxLoc – Pointer to the returned maximum location (in 2D case). NULL is used if not required. 指向返回最大值的位置(2d情况下),NULL为不要求
mask – Optional mask used to select a sub-array.
用于指定下级矩阵的操作掩码。(类似于求取特定区域的(roi)结果)

 

该函数不适用于多通道矩阵,如果你需要寻找所以通道的全局最大最小值,可首先使用Mat::reshape()重新诠释为但通道矩阵。如果你要检测特殊的同道可使用一下函数 ImageCOT(),minChannels(),spilt().

void meanStdDev(InputArray src,OutputArray mean, OutputArray stddev, InputArray mask=noArray())

(求取平均值与方差)

src:输入矩阵,这个矩阵应该是1-4通道的,这可以将计算结果存在Scalar_ ‘s中

mean:输出参数,计算均值

stddev:输出参数,计算标准差

mask:可选参数

 

mean, meanStdDev计算结果是double类型的。
mean返回的值是Scalar,就是vector类型的数组。所以当要Scalar的元素,要用[n]方式访问。
meanStdDev计算的均值和标准差都以Mat形式返回,这里返回的是1X1的矩阵。所以访问结果,要访问Mat的元素。

stddev取值:一列多行 [i][0]