Инициализация матрицы камеры в EMGU CV - PullRequest
1 голос
/ 08 июня 2019

Я пытаюсь использовать метод findEssentialMat в моей программе.У меня есть два изображения, два массива функций и фокус.Но этот метод требует матрицы камеры (тип: IInputArray) в качестве атрибута.Таким образом, вопрос заключается в том, как инициализировать матрицу камеры вручную, без калибровки камеры?

Этот код не работает, потому что double [,] - неправильный тип для представления cameraMatrix.

        double[,] camMat = {
            { focal, 0,  imgInput1.Size.Width / 2 },
            { 0,    focal,   imgInput1.Size.Height / 2 }, 
            { 0, 0, 1 }
        };

        VectorOfPointF vpfpoints1 = new VectorOfPointF(mKPstoPF(foundedFeatures1));
        VectorOfPointF vpfpoints2 = new VectorOfPointF(currFeat);

        CvInvoke.FindEssentialMat(points1: vpfpoints1,
                                  points2: vpfpoints2,
                                  cameraMatrix: camMat,
                                  method: Emgu.CV.CvEnum.FmType.Ransac,
                                  prob: 0.999,
                                  threshold: 1,
                                  mask: null);

1 Ответ

0 голосов
/ 16 июня 2019

Я использовал этот способ для определения матрицы камеры:

    Matrix<double> matr = new Matrix<double>(3, 3);
        matr[0, 0] = focal;
        matr[0, 1] = 0;
        matr[0, 2] = imgInput1.Size.Width / 2;
        matr[1, 0] = 0;
        matr[1, 1] = focal;
        matr[1, 2] = imgInput1.Size.Width / 2;
        matr[2, 0] = 0;
        matr[2, 1] = 0;
        matr[2, 2] = 1;
...