initUndistorRectifyMap возвращает пустые матрицы карт (С++)

Сначала я откалибровал свои камеры, используя образец кода в пакете opencv (stereo_calib.cpp). Теперь я хочу использовать это, чтобы исправить изображения для стереосопоставления. Я начал исправлять одно изображение, но не могу заставить его работать просто потому, что initUndistorRectifyMap возвращает карту, не содержащую ничего. Я не могу понять, что я делаю неправильно.

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]);

ОТВЕТ: Это было очень просто, так как изображения не загружались, размер изображения был нулевым, и поэтому карта представляла собой пустую матрицу. Опубликую ответ, как только смогу.


person TobyHijzen    schedule 04.03.2013    source источник
comment
Вы получаете изображения размером 0x0 в rmap или значение пикселей на карте равно 0? Обратите внимание, что карты, сгенерированные initUndistorRectifyMap, должны использоваться в качестве параметров в функции переназначения. Это создаст фактическое искажение, которое вы хотите увидеть. Я не уверен, что вам нужно использовать второй параметр rmap, если вы используете формат CV_16SC2.   -  person Bálint Fodor    schedule 04.03.2013
comment
Я получил изображения размером 0x0. Потому что картинки не загрузились. Спасибо за помощь. Извините, что задал такой простой вопрос, я просто продолжал искать ответ.   -  person TobyHijzen    schedule 04.03.2013


Ответы (1)


Это было очень просто, поскольку изображения не загружались, размер изображения был нулевым, поэтому карта была пустой.

person TobyHijzen    schedule 05.03.2013