aruco.net - 如何查找标记方向

时间:2016-10-06 11:21:34

标签: c# opencv aruco

我正在尝试使用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 个答案:

答案 0 :(得分:0)

看起来您尚未初始化相机参数。 cameraMatrixdistortion是相机的内在参数。您可以使用OpenCV来查找它们。

这是vor OpenCV 2.4,但可以帮助您了解基础知识: http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html

如果找到它们,您应该能够获得参数。