Перейти к содержимому
Compvision.ru
ssovec

StereoRectify- ошибка All the matrices must have the same data type

Recommended Posts

Здравствуйте, я тут уже наверное всех замучал вопросами :D , но задам еще один. Вызываю функцию StereoRectify() , она выдает ошибку All the matrices must have the same data type. Искал в интернете не у одного меня такая ошибка, но ни кто не чего дельного по ее исправлению не пишет, в чем может быть проблема? код ниже.

public static void StereoCalibration1()

    {

        int ImageNum = 3;

        CvMat R = new CvMat(3, 3, MatrixType.F32C1);

        CvMat T = new CvMat(3, 1, MatrixType.F32C1);

        CvMat Q = new CvMat(4, 4, MatrixType.F32C1);

        CvMat R1 = new CvMat(3, 3, MatrixType.F32C1);

        CvMat R2 = new CvMat(3, 3, MatrixType.F32C1);

        CvMat P1 = new CvMat(3, 4, MatrixType.F32C1);

        CvMat P2 = new CvMat(3, 4, MatrixType.F32C1);


        IplImage[] srcImg = new IplImage[ImageNum];


        for (int i = 0; i < ImageNum; i++)

        {

            srcImg[i] = new IplImage(string.Format("Data/Calibration/Right/{0:D2}.jpg" , i) , LoadMode.Color);

        }


        CvSize imageSize = srcImg[0].Size;

        CvMat intrinsic_left, intrinsic_right, distortion_left, distortion_right, imagePoints_left, imagePoints_right, objectPoints, pointsCount;

        objectPoints = Cv.Load<CvMat>("objectPoints_left.xml");

        imagePoints_left = Cv.Load<CvMat>("imagePoints_left.xml");

        imagePoints_right = Cv.Load<CvMat>("imagePoints_right.xml");

        pointsCount = Cv.Load<CvMat>("pointsCount_left.xml");

        intrinsic_left = Cv.Load<CvMat>("intrinsic_left.xml");

        intrinsic_right = Cv.Load<CvMat>("intrinsic_right.xml");

        distortion_left = Cv.Load<CvMat>("distortion_left.xml");

        distortion_right = Cv.Load<CvMat>("distortion_right.xml");


        Cv.StereoCalibrate(objectPoints, imagePoints_left, imagePoints_right, pointsCount, intrinsic_left, distortion_left, intrinsic_right, distortion_right, imageSize, R, T);

        Cv.StereoRectify(intrinsic_left, intrinsic_right, distortion_left, distortion_right, imageSize, R, T, R1, R2, P1, P2, Q);



            using (CvFileStorage fs = new CvFileStorage("stereo_calibration.xml" , null , FileStorageMode.Write))

            {

                fs.Write("stereo_rotation", R);

                fs.Write("stereo_translation", T);

                fs.Write("disparity_matrix", Q);

                fs.Write("rectification1", R1);

                fs.Write("rectification2", R2);

                fs.Write("projection1", P1);

                fs.Write("projection2", P2);

            };


            Cv.Save(R, "stereo_rotation.xml");

            Cv.Save(T, "stereo_translation.xml");

            Cv.Save(Q, "disparity_matrix.xml");

            Cv.Save(R1, "rectification1.xml");

            Cv.Save(R2, "rectification2.xml");

            Cv.Save(P1, "projection1.xml");

            Cv.Save(P2, "projection2.xml");


            foreach (IplImage img in srcImg)

            {

                img.Dispose();

            }

            Console.WriteLine(File.ReadAllText("stereo_calibration.xml"));



    }

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В примере stereo_calib.cpp есть применение этой команды.

У Вас ошибка несоответствия типов матриц и я подозреваю, что загружаемые матрицы у Вас имеют тип CV_64FC1, а не CV_32FC1.

Чтобы это проверить поменяйте типы остальных матриц на CV_64FC1. Или переконвертируйте загруженные при помощи convertTo.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×