- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在为一对立体相机编写 openCV 程序。完成相机校准和立体校准。
下一步是从我获得的 2 张图像中找到特征在空间中的位置。这就是为什么我必须对图像进行立体校正并在之后进行计算的原因。
我在 initUndistortRectifyMap
中遇到的问题如下:
-如果我将 stereoRectify()
计算的 R1 或 R2 传递给 initUndistortRectifyMap()
,我在重新映射后得到黑色图像。
-如果我将 r(一个空矩阵)传递给 initUndistortRectifyMap()
,我会在重新映射后得到未校正的图像。我得到的图像虽然有点失真。
我需要将 R1 和 R2 传递给 initUndistortRectifyMap()
以校正 2 个摄像头,否则当传递一个空矩阵时,立体头将不会旋转到同一平面。
以下是我的代码:
stereoRectify(intrinsic[0], distCoeffs[0], intrinsic[1], distCoeffs[1], imageSize,
R, T_Stereo, R1, R2, newP1, newP2, Q, CV_CALIB_ZERO_DISPARITY, -1, imageSize);
if (x_Cam.GetSerial()=="4002678487")
{
initUndistortRectifyMap(intrinsic[0], distCoeffs[0], R1, newP1, imageSize,
CV_16SC2 , mapx1, mapy1);
remap(x_Image, imageRectified[0],mapx1, mapy1, INTER_LINEAR);
return imageRectified[0];
}
if (x_Cam.GetSerial()=="4002702131")
{
//flip(in, in, -1);
initUndistortRectifyMap(intrinsic[1], distCoeffs[1], R2, newP2, imageSize,
CV_16SC2 , mapx2, mapy2);
remap(x_Image, imageRectified[1],mapx2, mapy2, INTER_LINEAR, BORDER_CONSTANT, 0);
return imageRectified[1];
}
我检查了所有进入 stereoRectify()
的矩阵值,它们是正确的。旋转矩阵 R1 和 R2 似乎也是正确的。我只是将黑色图像作为输出。
我尝试将垃圾值传递给 R1 和 R2(例如 R1*R2)的 InitUndistortRectifyMap()
以简单地查看效果,我确实得到了奇怪的结果,但不是黑色图像。
最佳答案
好吧,我有点绕过了这个问题,我想我会分享解决方案,以防任何人都可以使用它。
InitUndistortRectifyMap 在使用 StereoRectify 生成的旋转矩阵 R1 和 R2 时确实输出了空白图像。
因此,我尝试使用 StereoRectifyUncalibrated,它生成 2 个单应矩阵 H1 和 H2,并且我根据 OpenCV 文档计算了旋转:
R1 = inv(CamMatrix1)*H1*CamMatrix1R2 = inv(CamMatrix2)*H2*CamMatrix2
我将新的 R1 和 R2 传递给 InitUndistortRectifyMap 并重新映射,结果令人满意。
关于c++ - InitUndistortRectifyMap 和 Remap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13862001/
我正在使用 opencv 进行图像校正,但我想使用 c 函数 cvInitUndistortRectifyMap 返回的 map (mapx 和 mapy)自己进行映射(通常由 cvremap 完成)
我目前正在为一对立体相机编写 openCV 程序。完成相机校准和立体校准。 下一步是从我获得的 2 张图像中找到特征在空间中的位置。这就是为什么我必须对图像进行立体校正并在之后进行计算的原因。 我在
我想校准我的相机。目标是消除失真并且不裁剪图像(如上一张照片)。我是这样做的: 1)加载图片,找到棋盘的角 import cv2 import numpy as np import os import
我想消除相机图像的失真。 OpenCV 的 undistort 函数太慢了,所以我想像文档中提到的那样将它拆分为 initUndistortRectifyMap(作为初始步骤)和 remap(在渲染循
我想扭曲和矫正我的立体图像。为此,我在 Python 2.7 中使用了 Opencv 3.3。我使用的代码是: import cv2 import numpy as np cameraMatrixL
我是一名优秀的程序员,十分优秀!