Python 错误:(-215)重新投影到3D opencv

Python 错误:(-215)重新投影到3D opencv,python,opencv,Python,Opencv,当我尝试使用函数REPROJECTOMAGETO3D时,我遇到了一个错误。我尝试了两个不同的Q矩阵,得到了相同的图像。我已经检查过了,视差图像已经正确读取 我的代码(方法1) 我得到的错误是: OpenCV Error: Assertion failed (stype == (((0) & ((1 << 3) - 1)) + (((1)-1) << 3)) || stype == (((3) & ((1 << 3) - 1)) + ((

当我尝试使用函数REPROJECTOMAGETO3D时,我遇到了一个错误。我尝试了两个不同的Q矩阵,得到了相同的图像。我已经检查过了,视差图像已经正确读取

我的代码(方法1)

我得到的错误是:

    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
在代码中运行此命令会产生相同的错误


非常感谢您的帮助。

错误基本上告诉您视差贴图的类型不正确。开源库的好处是,如果错误不太清楚,您可以随时转到源代码,在这些行中:

CV_Assert( stype == CV_8UC1 || stype == CV_16SC1 ||
           stype == CV_32SC1 || stype == CV_32FC1 );
这与声明的内容一致:

差异–输入单通道8位无符号、16位有符号、32位 有符号或32位浮点视差图像

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

disparity = cv2.imread('disparity.png')
默认情况下,如果未传递任何标志,它将使用
CV\u LOAD\u IMAGE\u COLOR

这意味着is将加载一个
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 )
然后,至少输入将具有正确的类型


我希望这有帮助,如果没有,请留下评论。

谢谢。这很有帮助,因为Python3,不得不使用标志cv2.IMREAD_GRAYSCALE。现在遇到了另一个问题,我不知道如何绘制我获得的点,以验证我是否创建了正确的3D图像。我尝试了mplot3d,但我认为这不是我需要使用的。有什么建议吗?我想我遇到了一个问题,因为积分矩阵由+inf和-inf组成values@T.Schoonbeek一次一个问题:)如果你有其他问题可以提出新问题,那就更好了。这样,我不仅可以帮助别人,也可以帮助别人。关于你的问题,也许Q矩阵是错的?您可以使用公式[x y z w]=Q*转置([x y视差(x,y)w])的一些值对其进行测试,然后将结果的x y z除以结果的w。如果这些数字错误,您可能会注意到问题(例如w中的0)
disparity = cv2.imread('disparity.png', cv2.CV_LOAD_IMAGE_GRAYSCALE )
disparity = cv2.imread('disparity.png', cv2.CV_LOAD_IMAGE_ANYDEPTH )