【问题标题】:initUndistortRectifyMap returns empty map matrices (c++)initUndistortRectifyMap 返回空地图矩阵(C++)
【发布时间】:2013-03-04 11:28:18
【问题描述】:

我首先使用 opencv 包 (stereo_calib.cpp) 中的示例代码校准了我的相机。现在我想用它来纠正立体匹配的图像。我开始纠正一个图像,但我无法让它工作,因为 initUndistortRectifyMap 返回一个不包含任何内容的地图。我不知道我做错了什么。

Mat ciml, cimr, iml, imr, imlCalibrated, imrCalibrated;
vector<KeyPoint> keyl, keyr, keyInPlane, keyMatched;

//-- Load Images and convert to gray scale
string filenamel = "img/imL2.png";
string filenamer = "img/imR2.png";

ciml = imread(filenamel, 0);
cvtColor(iml, ciml, CV_GRAY2BGR);
cimr = imread(filenamer, 0);
cvtColor(imr, cimr, CV_GRAY2BGR);
Size imageSize = iml.size();

//-- Load calibration matrices
FileStorage fs_in, fs_ex;
fs_in.open( "intrinsics.yml", FileStorage::READ );
fs_ex.open( "extrinsics.yml", FileStorage::READ );
Mat rmap[2][2], cameraMatL, cameraMatR, coeffMatL, coeffMatR, R1, R2, P1, P2;
fs_ex["R1"] >> R1;  fs_ex["R2"] >> R2;
fs_ex["P1"] >> P1;  fs_ex["P2"] >> P2;
fs_in["M1"] >> cameraMatL;  fs_in["M2"] >> cameraMatR;
fs_in["D1"] >> coeffMatL;   fs_in["D2"] >> coeffMatR;
cout << "camera Matrix: " << endl << cameraMatL << endl << endl;

//-- Find remap values
initUndistortRectifyMap(cameraMatL, coeffMatL, R1, P1, imageSize, CV_16SC2, rmap[0][0], rmap[0][1]);
initUndistortRectifyMap(cameraMatR, coeffMatR, R2, P2, imageSize, CV_16SC2, rmap[1][0], rmap[1][1]);

回答: 这非常简单,因为图像没有加载图像大小为零,因此地图是一个空矩阵。 我会尽快发布答案。

【问题讨论】:

  • 您是否在 rmap 中获得 0x0 大小的图像或地图中的像素值为 0?请注意,由 initUndistortRectifyMap 生成的映射将用作函数 remap 中的参数。这将完成您想要看到的实际失真。如果您使用格式 CV_16SC2,我不确定您是否必须使用第二个 rmap 参数。
  • 我得到了 0x0 大小的图像。因为图片加载不出来。谢谢您的帮助。很抱歉问了这么简单的问题,我一直在寻找答案。

标签: c++ opencv stereo-3d


【解决方案1】:

这很简单,因为图像没有加载图像大小为零,所以地图是空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2014-09-18
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多