Я пытаюсь использовать openCV.NET для чтения отсканированных форм. Проблема в том, что иногда позиции соответствующих регионов, представляющих интерес, и выравнивание могут различаться в зависимости от того, какой принтер был напечатан, и как пользователь просматривал форму.aruco.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();
}
}
}