OpenCV - moments() 函数中的参数

OpenCV - parameters in moments() function

C++函数是:

Moments moments(InputArray array, bool binaryImage=false )

第一个我明白它是什么,第二个它说:

binaryImage – If it is true, all non-zero image pixels are treated as 1’s. The parameter is used for images only.

这到底是什么意思?我说这只对二值图像是正确的,对非二值图像是错误的?在我的应用程序中,我使用二值图像来计算简单的时刻。

这意味着如果此值为真,您插入的图像将被视为二值图像,这意味着即使您的值大于 1,它们也将被视为 1。

我(x,y) > 0 = 1

我(x,y) == 0 = 0

如果您输入的值是假的,那么 moments 中的值将在 moments 计算中采用真实值。

例如,假设您有以下 3X3 图片:

100 0 10

10 0 1

0 0 0

m00 即图像的面积将是:

如果标志为真,则我们有 4 个非零像素,值将为 4。

如果标志为假,我们将有 100+10+10+1 = 121

什么时候应该使用什么?

假设我们的图像中有一个斑点。 如果我们将图像视为二元图像,那么矩将为我们提供有关斑点的空间信息。 例如 m01/m00 和 m10/m00 将给出物体的质心。

但是,如果我们不将图像视为二元图像,那么瞬间就会给我们 texture/color 信息。 例如 m00/(blob 中的像素数)= blob 的平均颜色。