1

我正在尝试使用 OpenCV 2.4.9 校准立体相机,但在调用stereoCalibrate.

下面是我正在使用的图像。(由 MS Paint 提供了一些奇怪的着色故障)。顶部的三个图像来自左侧摄像头,底部的三个图像来自右侧摄像头。请注意,我使用了更多图像对,并且图像实际上并没有这么小,它们是 640x480;但是,我缩小了它们并省略了一些,因此这篇文章的长度不是 935837 英里。

示例输入图像: 示例校准图像.png

OpenCV 可以很好地找到棋盘角。我使用 显示它们drawChessboardCorners,它们看起来正确。所以这不是问题。

然后我使用calibrateCamera. 我使用 显示通过undistort使用矩阵传递的图像,calibrateCamera结果似乎过度校正了镜头失真。

基于 的输出未失真calibrateCamera基于 calibrateCamera 的输出未失真

如果我省略该calibrateCamera步骤并stereoCalibrate相应地调整标志(将CV_CALIB_FIX_INTRINSIC标志替换为CV_CALIB_SAME_FOCAL_LENGTH | CV_CALIB_ZERO_TANGENT_DIST) ,则会发生相同的错误

接下来我打电话stereoCalibrate,我得到这个错误:

OpenCV Error: Assertion failed (dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0))
in create, file c:/Users/s-foxk/Documents/libs/opencv/sources/modules/core/src/matrix.cpp, line 1564

...Generic Widnows Garbage...

terminate called after throwing an instance of 'cv::Exception'
what():  c:/Users/s-foxk/Documents/libs/opencv/sources/modules/core/src/matrix.cpp:1564:
error: (-215) dims == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) in function create

在过去的几个小时里,我一直在寻找解决这个问题的方法,以及关于这个错误的信息,以及更改我的代码的一小部分。不幸的是,一切都无济于事。关于这个错误的信息似乎很少,或者可能只是这种情况。

这个错误是什么意思?我怎样才能摆脱它?考虑到相机的 640x480 分辨率,我想到棋盘可能太远了。这可能是问题吗?

如果有人希望看到我的部分或全部代码,我会很乐意为它创建一个 pastebin,但我不愿把它丢在这里,因为它又长又丑。

4

0 回答 0