Исключение в cvConvertScale в OpenCV, вызывающемsolvePnP

Я пытаюсь использоватьsolvePnP из OpenCV (через OpenCvSharp), но получаю исключение, которое не понимаю.

An unhandled exception of type 'OpenCvSharp.OpenCVException' occurred in OpenCvSharp.dll
Additional information: src.size == dst.size && src.channels() == dst.channels()

После некоторых поисков я обнаружил, что это происходит из cvConvertScale в convert.cpp.

Вот как я его использую:

var objectPoints = new OpenCvSharp.CPlusPlus.Point3f[4] { o1, o2, o3, o4 };
var imagePoints = new OpenCvSharp.CPlusPlus.Point2f[4] { i1, i2, i3, i4 };
var intrinsic = new double[3, 3] { { d1, d2, d3 }, { d4, d5, d6}, { d7, d8, d9 } };

double[] rvec, tvec;

OpenCvSharp.CPlusPlus.Cv2.SolvePnP(objectPoints,
                                   imagePoints,
                                   intrinsic,
                                   null, out rvec, out tvec);

Если я правильно понимаю это исключение, это означает, что происходит преобразование сортировки, а исходная и целевая матрицы не имеют одинакового размера или одинакового количества каналов. Но оба моих списка пунктов имеют одинаковый размер. Матрица моей камеры 3x3, что должно быть хорошо. Я не понимаю.

Может ли кто-нибудь пролить свет на это?


person Nicolas C    schedule 19.03.2015    source источник


Ответы (1)


Ну, я думаю, что нашел проблему, поэтому я опубликую ее здесь, если кто-то наткнется на это...

Кажется, моя матрица камеры не была должным образом инициализирована. Я не знаю почему, но я не получаю матрицу 3x3 из своего двойника [3,3]. Поэтому я инициализировал его с помощью конструктора OpenCV Mat следующим образом:

var intrinsic = new Mat(3, 3, MatType.CV_64F, new double[] { d1, d2, d3, d4, d5, d6, d7, d8, d9 });

И теперь это работает ... если кто-нибудь знает, почему мой double[3,3] не производил соответствующий Mat(3,3), не стесняйтесь поделиться!

person Nicolas C    schedule 20.03.2015