错误:( - 1515)reprojectImageTo3D opencv

时间:2018-04-11 07:13:35

标签: python opencv

当我尝试使用函数reprojectImageTo3D时出现错误。我尝试了两种不同的Q矩阵,两者都得到了相同的图像。我已经检查过并且正确读取了视差图像。

我的代码(方法1)

optional<Big> ob{emplace, "1"}; // calls Big{"1"} in place (no moving)
optional<Big> oc{emplace};      // calls Big{} in place (no moving)
optional<Big> od{};             // creates a disengaged optional

我得到的错误:

disparity = cv2.imread('disparity.png')
f = 2262.52
u0 = 1096.98
v0 = 513.137
tx = 0.209313

q = np.array([
    [1, 0, 0, -u0],
    [0, 1, 0, -v0],
    [0, 0, 0, f],
    [0, 0, -1 / tx, 0]

points = cv2.reprojectImageTo3D(disparity, q)

我的方法2是使用相机矩阵和stereoRectify函数来获得以下Q矩阵

    OpenCV Error: Assertion failed (stype == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((3) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((4) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((5) & ((1 << 3) - 1)) + (((1)-1) << 3))) in reprojectImageTo3D, file /io/opencv/modules/calib3d/src/calibration.cpp, line 2747
Traceback (most recent call last):
  File "/home/tim/PycharmProjects/untitled/Testing.py", line 30, in <module>
    points = cv2.reprojectImageTo3D(disparity, q)
cv2.error: /io/opencv/modules/calib3d/src/calibration.cpp:2747: error: (-215) stype == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((3) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((4) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((5) & ((1 << 3) - 1)) + (((1)-1) << 3)) in function reprojectImageTo3D

在代码中运行它会产生相同的错误。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

该错误基本上告诉您视差图的类型不正确。开源库的好处是,如果错误不是那么清楚,你总是可以去源代码,这些代码就是这样:

CV_Assert( stype == CV_8UC1 || stype == CV_16SC1 ||
           stype == CV_32SC1 || stype == CV_32FC1 );

这与它所声明的documentation of reprojectImageTo3D一致:

  

差异 - 输入单通道8位无符号,16位有符号,32位   带符号或32位浮点差异图像。

查看代码,您只有一行代码来处理您的视差图像:

disparity = cv2.imread('disparity.png')

documentation of imread表示默认情况下,如果没有传递任何标记,则会使用CV_LOAD_IMAGE_COLOR

这意味着除非您说的不同,否则会加载CV_8UC3。此类型不是此功能的已批准类型之一,因此无法执行。

现在,你能做什么?这取决于它在这样的PNG中保存了什么?也许是8位灰度图像,然后使用:

disparity = cv2.imread('disparity.png', cv2.CV_LOAD_IMAGE_GRAYSCALE )

或者它可能是16位灰度图像?

disparity = cv2.imread('disparity.png', cv2.CV_LOAD_IMAGE_ANYDEPTH )

然后,至少输入将具有正确的类型。

我希望这有帮助,如果没有,请发表评论。