opencv 统计函数countNonZero() minMaxloc() sumElems() mean() meanStdDev() reduce()

1.countNonZero()用来统计元素值为非0值的像素点个数。

cv2.countNonZero(src) -> retval

src:输入图像,必须为单通道图像;
retval:非零像素值个数
absdiff()计算了2幅图像差异后得到的新图像
零值元素数量可以由元素总数减去非零值数量得到

2.minMaxLoc()函数返回图像中的元素值的最小值和最大值,以及最小值和最大值的坐标。

cv2.minMaxLoc(src[, mask])->minVal, maxVal, minLoc, maxLoc

src:输入图像,必须为单通道图像;
mask:掩码;
minVal, maxVal, minLoc, maxLoc:依次为最小值,最大值,最小值的坐标,最大值的坐标;

返回minLoc和maxLoc的坐标位置是以OpenCV中(x,y)的形式组织的,但是在numpy中下标访问是按照array[行][列]形式,类似于array[y][x]的形式,所以minLoc和maxLoc的坐标值不能直接用于numpy的下标访问,需要对调后才可以使用.

3.sumElems()统计所有元素值之和,如果有多通道,分通道计算,返回的是一个四元组,依次对应图像可能包含的第0,1,2,3通道,如果单通道图像则只有下标0对应的元素有意义,如果是3通道则只有前3个元素有意义。

cv2.sumElems(src) -> retval

src:输入图像,可以是单通道,3通道或4通道图像;
retval:返回的是一个4元组,分别对应各通道元素的和。

4.mean()用来统计单个通道内像素值的平均值,如果有多个通道,分通道计算。

cv2.mean(src[, mask]) ->retval

src:输入图像,可以是单通道,3通道或4通道图像;
mask:可选的掩码;
retval:返回的是一个4元组,分别对应各通道元素的平均值。

5.meanStdDev()用来统计单通道内像素值的平均值和标准差,一次调用返回2个结果。

cv2.meanStdDev(src[, mean[, stddev[, mask]]]) ->mean, stddev

src:输入图像,必须为单通道图像;
mask:可选的掩码;
mean:平均值;
stddev:标准差;
meanStdDev()返回的是一个元组,下标0为平均值mean,下标1为标准差stddev。

6.reduce()用来统计二维数组的每一行或每一列中的最小值、最大值、平均值、和。这里reduce的含义也可以理解为将二维矩阵压缩成一维向量,压缩后的值根据入参类型可以是最小值、最大值、平均值或者和。

cv2.reduce(src, dim, rtype[, dst[, dtype]]) ->dst

src:源图像,可以是单通道也可以是多通道,多通道时分通道计算;
dim:如果为0表示统计每列的数据等价于压缩成行(row),如果为1表示统计每行的数据等价于压缩成列(column);
rtype:reduce操作的类型;
dst:目标图像;
dtype:目标图像的类型,如果不指定默认为-1表示用源图像src的数据类型;

dim参数的理解:如果为0表示生成新的数据将是一个行向量,所以是在每一列上操作,将单个的列压缩成一个数值从而组成一个行向量;如果为1则表示生成新的数据是一个列向量,在每一行上操作,将单个的行压缩成一个数值从而组成一个列向量。

rtype标志	含义
REDUCE_SUM	所有行或列的和
REDUCE_AVG	所有行或列的平均值
REDUCE_MAX	所有行或列的最大值
REDUCE_MIN	所有行或列的最小值

countNonZero()用来统计的是非零元素的数量;minMaxLoc()返回位置参数是按照OpenCV格式组织的,在numpy数组中使用时需要对调下标组织形式,返回的坐标是按行扫描方式得到的最开始的坐标;sumElems()用来计算单个通道内所有元素的和,其原生的C接口函数为sum();meanStdDev()返回的平均值和标准差是一个numpy数组,其数组长度依赖输入图像的通道数,这点和mean()、sumElems()计算的结果默认包含4个元素有所区别;reduce()计算单行/列的和、均值时dtype类型需要指定为能精确表示的数据类型。

猜你喜欢

转载自blog.csdn.net/aqiangdeba/article/details/129777351