这可能是一个简单的问题,但我想知道为什么像素值可以有浮点值?我正在跟踪一个目标并使用contours()和moment()方法获得质量中心,如果我想要我可以得到它们的浮点值。
但为什么这可能呢?图像不能具有0.1234像素
答案 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`值的图像的示例是:
0, 255
范围通常为uchar
,[0,1]
范围为float
。这只是一个惯例。float
结果的某些操作的结果。这不一定是准备显示图像,但在这种情况下只是一个常规矩阵,保留一些值。不要忘记图像只是一个矩阵,其值代表像素值。您还可以拥有float
坐标。这是子像素精度的情况。 blob的质心可能有float
个坐标。例如(5.1, 6.8)
。您可以使用整数坐标绘制此点,从而减少一点精度,例如: (5, 7)
,但您可能需要float
值才能进一步计算。