1) Контекст
Я использую плагин EmguCV для Unity, чтобы вызывать функции openCV из моего кода C #.Точнее мне нужно вызвать метод SolvePnPRansac.
Вот документация для метода SolvePnPRansac и ожидаемые аргументы:
http://www.emgu.com/wiki/files/3.1.0/document/html/36ff5d6b-498a-0587-5350-370bdecf64d7.htm
2) Проблема:
Вызов метода приводит к сбою самого редактора Unity, не оставляя исключений и трассировки стека, потому что плагин внутренне падает, и Unity, похоже, не в состоянии справиться с этим, несмотря на мой try-catchblock.
из журналов, которые постоянно хранит Unity, это то, что я получаю, что явно указывает на несоответствие типов:
Stacktrace: at (обертка, управляемая в нативный) Emgu.CV.CvInvoke.cveSolvePnPRansac (intptr, intptr, intptr, intptr, intptr, intptr, bool, int, одинарный, двойной, intptr, Emgu.CV.CvEnum.SolvePnpMethod) в Emgu.C (управляемой оболочкой).CvInvoke.cveSolvePnPRansac (intptr, intptr, intptr, intptr, intptr, intptr, bool, int, одинарный, двойной, intptr, Emgu.CV.CvEnum.SolvePnpMethod) в Emgu.CV.CvInvoke.SolveguPR.CV.IInputArray, Emgu.CV.IInputArray, Emgu.CV.IInputArray, Emgu.CV.IOutputArray, Emgu.CV.IOutputArray, bool, int, одинарный, двойной, Emgu.CV.IOutputArray, Emgu.CV.CvEnum.SolvePnpMethod) [0x00090] в / Users / пользователь/Documents/dgunity-v2/Assets/Emgu.CV/Emgu.CV/PInvoke/CvInvokeCalib3d.cs:659 at ObjectLocalization.LocalToCameraMatrixFromPnP ...
3) Что я пробовал :
Я могу успешно запустить:
CvInvoke.SolvePnP(objectPoints, imagePoints, cameraMatrix, distortionCoeffs, rvec, tvec, useIntrinsicGuess);
, где
- objectPoints имеет тип Emgu.CV.Util.VectorOfPoint3D32F
- imagePointsимеет тип Emgu.CV.Util.VectorOfPointF
- cameraMatrix - 3X3 типа Emgu.CV.Matrix
- distortionCoeffs - 1X4 типа Emgu.CV.Util.VectorOfFloat
- rvec и tvec имеют тип Emgu.CV.Util.VectorOfFloat
- , а useIntrinsicGuess имеет тип bool
4) Что не работает
сейчас я пытаюсь:
CvInvoke.SolvePnPRansac(ransacObjPoints, ransacImgPoints, cameraMatrix, distortionCoeffs, rvec, tvec, useIntrinsicGuess, iterationsCount, reprojectionError, confident, inliers, Emgu.CV.CvEnum.SolvePnpMethod.Iterative);
где
- iterationsCount равен 100 типа int
- reprojectionError равен 8f типа float
- cЗначение onfident равно 0,99 типа double
- . Пустые значения типа Emgu.CV.Util.VectorOfInt
. Это просто приводит к сбою редактора единиц.Что я делаю не так?