2016-10-06 83 views
0

私は、スキャンしたフォームを読むためにopenCV.NETを使用しようとしています。問題は、関連する関心領域と位置合わせの位置が、印刷されたプリンタとユーザがフォームを走査した方法によって異なる場合があることである。aruco.net - マーカーの向きを見つける方法

私はArucoマーカーを参照ポイントとして使用できると思っていました.ArUcoマーカーを認識するために既に構築されたライブラリ(ArUco.NET)があるためです。私は、Arukcoコードがどのくらい回転しているのかを調べ、テキストがまっすぐであることを確認するためにその量だけフォームを後方に回転させたいと考えていました。次に、フォーム上の特定の領域でOCRを使用するために、Arucoコードの中心を参照ポイントとして使用することができます。

次のコードを使用して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(); 


        } 

       } 
      } 

答えて

0

カメラのパラメータが初期化されていないようです。 cameraMatrixおよびdistortionは、カメラの内蔵パラメータです。 OpenCVを使って見つけることができます。

これは、VORのOpenCVの2.4ですが、あなたは基礎を理解するのに役立ちます:あなたがそれらを発見した場合は http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

あなたはパラメータを取得することができるはずです。

関連する問題