OpenCV warpPerspective与另一个数据类型

时间:2019-04-15 15:53:14

标签: python numpy opencv

我有一张图片和属于该图片的深度图,我需要每个像素的深度(我使用的是Kinect)。我想用这张照片及其深度创建一个全景视图,所以我使用了一些opencv方法。尤其是这一行目前正在引起问题:

result = cv2.warpPerspective(imageA, H, (imageA.shape[1] + imageB.shape[1], imageA.shape[0]))

这里的问题是,深度图不使用8位表示来指示像素的深度。这是一个32位整数。我在这里遇到的问题是,此cv2.warpPerspective()方法不想采用此数据类型。这是引发的错误:

  

TypeError:不支持src数据类型= 8

我可以将其转换为8位,但这会丢失太多信息,我无法承受失去那么多深度的准确性。当我将其转换为8位时,我知道它可以工作。因此,我猜想我需要一种解决方法,但不确定如何。

1 个答案:

答案 0 :(得分:0)

不是warpPerspective不想采用此数据类型。通常是OpenCV,因为不支持无符号32位整数数组。

您可以拥有:

  • 8位整数,有符号和无符号
  • 带符号和无符号的16位整数
  • 32位整数,仅带符号
  • 32位浮点数
  • 64位浮点数

numpy库的数组(由Python API使用)在执行功能方面更加灵活。不幸的是,当它们传递给OpenCV函数时,有时可能会导致相当模糊的错误。


不幸的是,使用32位带符号整数也是没有问题的,因为cv::remap(用于执行实际的转换)似乎不支持它们。但是,它确实支持所有其他6种可用类型。根据深度图值的实际范围,可以使用16位整数或浮点选项之一。