private Dictionary<int, List<MarkerStructure>> MarkerTracker(OpenCvSharp.Mat frame, int video_idx, int frame_number) { if (frame.Empty()) return null; using (var detector = new Aruco.Net.MarkerDetector()) { Dictionary<int, List<MarkerStructure>> MarkerDict = new Dictionary<int, List<MarkerStructure>>(); var cameraMatrix = new OpenCV.Net.Mat(3, 3, OpenCV.Net.Depth.F32, 1); var distortion = new OpenCV.Net.Mat(1, 4, OpenCV.Net.Depth.F32, 1); detector.ThresholdMethod = ThresholdMethod.AdaptiveThreshold; detector.Param1 = 7.0; detector.Param2 = 7.0; detector.MinSize = 0.04f; detector.MaxSize = 0.5f; detector.CornerRefinement = CornerRefinementMethod.Lines; // Detect markers in a sequence of camera images. var markerSize = 10; var image2 = new OpenCV.Net.Mat(new OpenCV.Net.Size(frame.Width, frame.Height), (OpenCV.Net.Depth)frame.Depth(), frame.Channels(), frame.Data); try { var detectedMarkers = detector.Detect(image2, cameraMatrix, distortion, markerSize); foreach (var marker in detectedMarkers) { //event trigger List<MarkerStructure> tmp = new List<MarkerStructure>(); if (!MarkerDict.TryGetValue(marker.Id, out tmp)) { if (tmp != null) { tmp.Add(new MarkerStructure(marker.Id, video_idx, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict[marker.Id] = tmp; } else { List<MarkerStructure> tmp2 = new List<MarkerStructure>(); tmp2.Add(new MarkerStructure(marker.Id, video_idx, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict[marker.Id] = tmp2; } } else { List<MarkerStructure> new_list = new List<MarkerStructure>(); new_list.Add(new MarkerStructure(marker.Id, video_idx, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict.Add(marker.Id, new_list); } } } catch(Exception) { } return MarkerDict; } }
private Dictionary <int, List <MarkerStructure> > MarkerTracker(OpenCvSharp.Mat frame, int frame_number) { if (frame.Empty()) { return(null); } using (var detector = new Aruco.Net.MarkerDetector()) { Dictionary <int, List <MarkerStructure> > MarkerDict = new Dictionary <int, List <MarkerStructure> >(); var cameraMatrix = new OpenCV.Net.Mat(3, 3, OpenCV.Net.Depth.F32, 1); var distortion = new OpenCV.Net.Mat(1, 4, OpenCV.Net.Depth.F32, 1); detector.ThresholdMethod = ThresholdMethod.AdaptiveThreshold; detector.Param1 = 7.0; detector.Param2 = 7.0; detector.MinSize = 0.04f; detector.MaxSize = 0.5f; detector.CornerRefinement = CornerRefinementMethod.Lines; // Detect markers in a sequence of camera images. var markerSize = 10; var image2 = new OpenCV.Net.Mat(new OpenCV.Net.Size(frame.Width, frame.Height), (OpenCV.Net.Depth)frame.Depth(), frame.Channels(), frame.Data); try { var detectedMarkers = detector.Detect(image2, cameraMatrix, distortion, markerSize); foreach (var marker in detectedMarkers) { //event trigger List <MarkerStructure> tmp = new List <MarkerStructure>(); if (!MarkerDict.TryGetValue(marker.Id, out tmp)) { if (tmp != null) { tmp.Add(new MarkerStructure(marker.Id, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict[marker.Id] = tmp; } else { List <MarkerStructure> tmp2 = new List <MarkerStructure>(); tmp2.Add(new MarkerStructure(marker.Id, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict[marker.Id] = tmp2; } } else { List <MarkerStructure> new_list = new List <MarkerStructure>(); new_list.Add(new MarkerStructure(marker.Id, frame_number, new OpenCV.Net.Point2f(marker.Center.X - (marker.Size / 2), marker.Center.Y - (marker.Size / 2)), new OpenCV.Net.Size((int)marker.Size, (int)marker.Size))); MarkerDict.Add(marker.Id, new_list); } } } catch (Exception) { } return(MarkerDict); } }