为什么像素可以有浮点值?

时间:2016-01-13 15:58:46

标签: opencv floating-point pixel precision

这可能是一个简单的问题,但我想知道为什么像素值可以有浮点值?我正在跟踪一个目标并使用contours()和moment()方法获得质量中心,如果我想要我可以得到它们的浮点值。

但为什么这可能呢?图像不能具有0.1234像素

2 个答案:

答案 0 :(得分:5)

我相信(如果我确实理解你的话)你发现了interpolation的世界。图像本身是一个连续的平面,x坐标的范围为[0, width]y范围[0, height]。要在监视器中显示图像或将其存储在磁盘中,图像将以像素为单位进行离散化。

如果要对图像应用离散操作(例如卷积,加法或阈值),将其视为值网格是正常的。但是,特别是在您跟踪图像中的对象的情况下,您应该将其视为连续空间。一个物体的质心,可能不是一个离散值,它将是上述范围内的一些浮点坐标(即p = (50.5, 10.1)),但这不应该是一个问题。

如果需要,您还可以使用bilinear(或更复杂的)插值来访问p = (50.5, 10.1)像素的颜色(或灰度值)。

答案 1 :(得分:4)

Mat可以包含float个值,以及许多其他类型。具有float`值的图像的示例是:

  • BGR图片的0, 255范围通常为uchar[0,1]范围为float。这只是一个惯例。
  • 您的图片是产生float结果的某些操作的结果。这不一定是准备显示图像,但在这种情况下只是一个常规矩阵,保留一些值。不要忘记图像只是一个矩阵,其值代表像素值。

您还可以拥有float坐标。这是子像素精度的情况。 blob的质心可能有float个坐标。例如(5.1, 6.8)。您可以使用整数坐标绘制此点,从而减少一点精度,例如: (5, 7),但您可能需要float值才能进一步计算。