Выписка из документа opencv:
"Функция stereoRectify вычисляет матрицы вращения для каждой камеры, которые (фактически) делают обе плоскости изображения камеры одной и той же плоскостью. Следовательно, это делает все эпиполярные линии параллельными и, таким образом, упрощает проблему плотного стерео соответствия. При вводе функция принимает матрицы, вычисленные функцией stereoCalibrate (), и на выходе они дают 2 матрицы вращения, а также 2 матрицы проекций в новых координатах. "
Ответ:
Это означает 3 варианта:
Или у вас есть два изображения, и вы знаете модель вашей камеры (intrisics), которую вы загрузили из XML, например loadXMLFromFile () => стереоRectify () => reprojectImageTo3D ()
Или у вас их нет, но вы можете откалибровать камеру => StereoCalibrate () => StereoRectify () => reprojectImageTo3D ()
Или вы не можете откалибровать камеру (это ваш случай, потому что у вас нет камеры сэра Цукубы, тогда: вам нужно найти пару ключевых точек на обоих изображениях, например, SURF, SIFT (вы на самом деле может использовать любой детектор BLOB-объектов), затем вычислить дескрипторы этих ключевых точек, затем сопоставить ключевые точки из правого и левого изображений в соответствии с их дескрипторами, а затем найти основную матрицу из них. Обработка намного сложнее и будет выглядеть следующим образом: обнаружение ключевых точек (SURF, SIFT) => извлечение дескрипторов (SURF, SIFT) => сравнение и сопоставление дескрипторов (подходы, основанные на BruteForce, Flann) => найти фундаментальный мат (findFundamentalMat ()) из этих пар => stereoRectifyUncalibrated () => reprojectImageTo3D ()
Я надеюсь, что это помогло вам, если нет, пожалуйста, дайте мне знать
Julien