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

Gre*_*en8 3 floating-point precision opencv pixel

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

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

Mik*_*iki 5

AMat可以保存float值以及许多其他类型。具有 float` 值的图像示例如下:

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

你也可以有float坐标。这就是亚像素精度的情况。blob 的质心可能有float坐标。例如(5.1, 6.8)。你可以用整数坐标绘制这个点,例如(5, 7),但你可能需要这个float值来进一步计算。


Ima*_*ngo 5

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

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

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