为什么在OpenCV中使用浮点数?

时间:2018-06-25 07:38:11

标签: image opencv floating-point

我知道图像的cv::8UC1cv::8UC3格式,分别是1通道0-255无符号字符或3通道,分别用于存储RGB 0-255无符号字符图像格式。

但是像cv::32F这样的浮点格式呢?关于这些家伙,我有两个问题。

1-为什么它们是32位的?我的意思是为什么我们需要存储0-4294967296范围内的像素强度? (然后,我认为我们必须再次将其转换为0-255范围内的8位数字!)

2-据我所知,我们使用二维矩阵来存储具有整数坐标(x,y)的图像。但是我在一些代码中看到它们使用浮点数来查找像素的位置/坐标。就像O'reilly的书的这一部分一样:

  

亚像素角   如果出于提取几何图形的目的处理图像   测量,而不是提取特征以进行识别,那么您将   通常需要比由提供的简单像素值更高的分辨率   cv :: goodFeaturesToTrack()   。换一种说法就是这样的像素

     

带有整数坐标,而我们有时需要实数值   坐标-例如,像素位置为(8.25,117.16)。

这是什么意思?

1 个答案:

答案 0 :(得分:2)

我将尝试做一个简短的解释,但是我相信您会随着时间的推移更好地理解它。 当我们以数字方式捕获图像时,我们实际上使用了一个类似桌子的传感器,在其中我们测量照射到该单元的光量。光是物理量。您将测量值限制为0..255的事实并不意味着我们的眼睛无法看到更精细的分割。因此,许多应用程序的确提供0 ... 2 ^ 16-1的值,而不是0 ... 2 ^ 8-1(即255)的值。现在,我认为您已经足够回答您的问题了:

  1. 想象一下,我有一个从飞机上拍摄的农场的图像。我知道这张照片中某处有一个农夫。我想在每个像素中存储该像素是农民的概率(从飞机上射击时,人很小)。概率范围是0到1。因此,我需要浮点数。如果我进行高精度计算,则可能不仅需要32位浮点,还需要64位浮点来获得更高的精度。

  2. 如上所述,我们仅捕获“像素表”,但我们假设现实更为复杂。确实如此。因此,农民可能会“掉进”两个像素之间。因此,我们可以采取另一种方法:尝试找到农民要在其上行驶的拖拉机,并在其中途行驶。可以恰好落在两个像素之间。

继续阅读,通过练习,您可以掌握它了。