C语言openCV图像显示歪斜,c – OpenCV stereoRectify扭曲图像

我们有一个ELP 1.0百万像素双镜头Usb立体相机,我们正在尝试使用C语言中的OpenCV 3.1进行校准.但是,校准的结果完全无法使用,因为调用stereoRectify会使图像完全变为两次.这就是我们的工作:

在两个相机中找到校准(棋盘)图案,棋盘尺寸为5×7,无论拍摄的图像数量如何,结果几乎相同

findChessboardCorners(img[k], boardSize, corners, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_NORMALIZE_IMAGE)

cornerSubPix(img[k], corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01));

正确检测所有使用的棋盘

drawChessboardCorners(img[k], boardSize, corners, bFound);

然后我们分别校准每个摄像机(但这一步似乎对立体声校准不重要),但我们可以用它来分别验证每个摄像机

calibrateCamera(objectPoints, imagePoints[k], Size(320, 240), cameraMatrix[k], distCoeffs[k], rvecs, tvecs, 0)

然后我们做立体声校准

stereoCalibrate(objectPoints, imagePoints[0], imagePoints[1], cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1],

Size(320, 240), R, T, E, F, CALIB_USE_INTRINSIC_GUESS);

计算整流变换

stereoRectify(cameraMatrix[0], distCoeffs[0], cameraMatrix[1], distCoeffs[1], Size(320, 240), R, T, R1, R2, P1, P2, Q,

CALIB_ZERO_DISPARITY, 1, Size(320, 240), &validRoI[0], &validRoI[1]);

初始化重映射的映射

Mat rmap[2][2];

initUndistortRectifyMap(cameraMatrix[0], distCoeffs[0], R1, P1, Size(FRAME_WIDTH, FRAME_HEIGHT), CV_16SC2, rmap[0][0], rmap[0][1]);

initUndistortRectifyMap(cameraMatrix[1], distCoeffs[1], R2, P2, Size(FRAME_WIDTH, FRAME_HEIGHT), CV_16SC2, rmap[1][0], rmap[1][1]);

...

remap(img, rimg, rmap[k][0], rmap[k][1], INTER_LINEAR);

imshow("Canvas", rimg);

结果是完全扭曲的图像.正如我在开始时所说的,所有校准/棋盘图案都被正确检测到,如果我们不调用stereoRectify函数,未失真的图像(重新映射后)看起来很完美.如果我们调用stereoRectify函数就会出现问题.

我们错过了什么吗?

校准图像的数量似乎没有任何影响(有时拍摄2张图像比10幅图像提供更好的结果(但仍然无法使用))

这是校准模式的示例.我们采取了几种不同的方向:

Ralqs.jpg

如果我们不调用stereoRectify,这是校准的结果:

Ctv6M.jpg

如果我们调用stereoRectify(但大多数情况会变得更糟),这是错误的结果:

QzupO.jpg

在此先感谢任何帮助可能是错误的.

解决方法:

嘿你有没有尝试在函数stereoRectify中更改参数alpha的值.我记得,一旦我也获得了这样的结果并将alpha值改为0,我的工作就完成了.

请告诉我你用alpha = -1,alpha = 0.5和alpha = 0获得的结果

标签:c,opencv,camera-calibration

来源: https://codeday.me/bug/20190722/1502276.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值