为什么像素可以有浮点值?
Why pixels can have float values?
这可能是一个简单的问题,但我想知道为什么像素值可以有浮点值?我正在跟踪一个目标并使用 contours() 和 moments() 方法获取质量中心,如果我想要的话,我可以获得它们的浮点值。
但为什么这可能呢?图片不能有 0.1234 像素
一个 Mat
可以保存 float
值,以及许多其他类型。具有 float` 值的图像示例如下:
- 对于
uchar
,BGR 图像通常在 0, 255
范围内,但对于 float
,则在 [0,1]
范围内。这只是一个约定。
- 您的图像是产生
float
结果的某些操作的结果。这不一定是 ready-to-display 图像,但在这种情况下只是一个规则矩阵,包含一些值。不要忘记图像只是一个矩阵,其值代表像素值。
您还可以有 float
坐标。这是sub-pixel精度的情况。斑点的质心可能具有 float
坐标。例如(5.1, 6.8)
。您可以使用整数坐标来绘制这一点,但会失去一点精度,例如(5, 7)
,但您可能需要 float
值进行进一步计算。
我相信(如果我没有正确理解您的话)您已经发现了 interpolation 的世界。图像本身是一个连续的平面,x
坐标在 [0, width]
范围内,y
坐标在 [0, height]
范围内。为了在监视器中显示图像或将其存储在磁盘中,图像以像素为单位进行离散化。
如果您对图像应用卷积、加法或阈值等离散操作,通常会将其视为值网格。但是,特别是在您跟踪图像中的对象的情况下,您应该将其视为连续的 space。一个物体的质心,可能不会是一个离散值,它会是上述范围内的某个浮点坐标(即 p = (50.5, 10.1)
),但这应该不是问题。
如果需要,您还可以使用 bilinear(或更复杂的)插值来访问 p = (50.5, 10.1)
像素的颜色(或 gray-scale 值)。
这可能是一个简单的问题,但我想知道为什么像素值可以有浮点值?我正在跟踪一个目标并使用 contours() 和 moments() 方法获取质量中心,如果我想要的话,我可以获得它们的浮点值。
但为什么这可能呢?图片不能有 0.1234 像素
一个 Mat
可以保存 float
值,以及许多其他类型。具有 float` 值的图像示例如下:
- 对于
uchar
,BGR 图像通常在0, 255
范围内,但对于float
,则在[0,1]
范围内。这只是一个约定。 - 您的图像是产生
float
结果的某些操作的结果。这不一定是 ready-to-display 图像,但在这种情况下只是一个规则矩阵,包含一些值。不要忘记图像只是一个矩阵,其值代表像素值。
您还可以有 float
坐标。这是sub-pixel精度的情况。斑点的质心可能具有 float
坐标。例如(5.1, 6.8)
。您可以使用整数坐标来绘制这一点,但会失去一点精度,例如(5, 7)
,但您可能需要 float
值进行进一步计算。
我相信(如果我没有正确理解您的话)您已经发现了 interpolation 的世界。图像本身是一个连续的平面,x
坐标在 [0, width]
范围内,y
坐标在 [0, height]
范围内。为了在监视器中显示图像或将其存储在磁盘中,图像以像素为单位进行离散化。
如果您对图像应用卷积、加法或阈值等离散操作,通常会将其视为值网格。但是,特别是在您跟踪图像中的对象的情况下,您应该将其视为连续的 space。一个物体的质心,可能不会是一个离散值,它会是上述范围内的某个浮点坐标(即 p = (50.5, 10.1)
),但这应该不是问题。
如果需要,您还可以使用 bilinear(或更复杂的)插值来访问 p = (50.5, 10.1)
像素的颜色(或 gray-scale 值)。