aruco.net -как найти ориентацию маркера

Я пытаюсь использовать openCV.NET чтение отсканированных форм. Проблема заключается в том, что иногда позиции соответствующих областей интереса и выравнивания могут отличаться в зависимости от принтера, на котором была напечатана форма, и от того, как пользователь отсканировал форму.

Поэтому я подумал, что могу использовать маркер ArUco в качестве опорной точки, поскольку есть библиотеки (ArUco.NET) уже построен, чтобы признать их. Я надеялся узнать, сколько код ArUco поворачивается, а затем повернуть форму назад на эту сумму, чтобы убедиться, что текст прямой. Затем я могу использовать центр кода ArUco в качестве опорной точки для использования OCR на определенных областях в форме.

Я использую следующий код для получения OpenGL modelViewMatrix. Однако, кажется, что это всегда одни и те же числа, независимо от того, под каким углом поворачивается код ArUco. Я только начал со всех этих библиотек, но я думал, что modelViewMatrix даст мне разные значения в зависимости от поворота маркера. Почему всегда одно и то же?

 Mat cameraMatrix = new Mat(3, 3, Depth.F32, 1);
            Mat distortion = new Mat(1, 4, Depth.F32, 1);
            using (Mat image2 = OpenCV.Net.CV.LoadImageM("./image.tif", LoadImageFlags.Grayscale))
            {
                using (var detector = new MarkerDetector())
                {
                    detector.ThresholdMethod = ThresholdMethod.AdaptiveThreshold;
                    detector.Param1 = 7.0;
                    detector.Param2 = 7.0;
                    detector.MinSize = 0.01f;
                    detector.MaxSize = 0.5f;
                    detector.CornerRefinement = CornerRefinementMethod.Lines;

                    var markerSize = 10;
                    IList<Marker> detectedMarkers = detector.Detect(image2, cameraMatrix, distortion);
                    foreach (Marker marker in detectedMarkers)
                    {

                        Console.WriteLine("Detected a marker top left at: " + marker[0].X + @" " + marker[0].Y);
                        //Upper 3x3 matrix of modelview matrix (0,4,8,1,5,9,2,6,10) is called rotation matrix.
                        double[] modelViewMatrix = marker.GetGLModelViewMatrix();


                    }

                }
            }

1 ответ

  1. Похоже, вы не инициализировали параметры камеры.
    cameraMatrixи distortionвнутреннеприсущие параметры вашей камеры. Вы можете использовать OpenCV, чтобы найти их.

    Это vor OpenCV 2.4 но поможет вам понять основы:
    http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

    Если вы нашли их, вы должны иметь возможность получить параметры.