コード例 #1
0
            public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                if (DetectedMarkers[cameraId][dictionary] > 0)
                {
                    // Draw all the detected markers
                    if (arucoTracker.DrawDetectedMarkers)
                    {
                        // TODO: draw only markers in ArucoObjects list + add option to draw all the detected markers
                        Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);
                    }

                    // Draw axes of detected tracked markers
                    if (arucoTracker.DrawAxes && cameraParameters != null && MarkerRvecs[cameraId][dictionary] != null)
                    {
                        for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                        {
                            ArucoObject foundArucoObject;
                            int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                            if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                            {
                                Aruco.DrawAxis(image, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId],
                                               MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), EstimatePoseMarkerLength);
                            }
                        }
                    }
                }

                // Draw the rejected marker candidates
                if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)
                {
                    Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]);
                }
            }
コード例 #2
0
        public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
        {
            base.Draw(cameraId, dictionary, image);

            if (DetectedMarkers[cameraId][dictionary] > 0)
            {
                // Draw all the detected markers
                if (arucoTracker.DrawDetectedMarkers)
                {
                    Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);
                }

                // Draw axes of detected tracked markers
                if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && MarkerRvecs[cameraId][dictionary] != null)
                {
                    for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                    {
                        ArucoObject foundArucoObject;
                        int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                        if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                        {
                            Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],
                                           MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), estimatePoseMarkerLength);
                        }
                    }
                }
            }

            // Draw the rejected marker candidates
            if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)
            {
                Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]);
            }
        }
コード例 #3
0
 public override void Place(int cameraId, Aruco.Dictionary dictionary)
 {
     if (MarkerRvecs[cameraId][dictionary] != null)
     {
         for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
         {
             ArucoObject foundArucoObject;
             int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
             if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
             {
                 float positionFactor = foundArucoObject.MarkerSideLength / EstimatePoseMarkerLength;
                 PlaceArucoObject(foundArucoObject, MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i),
                                  cameraId, positionFactor);
             }
         }
     }
 }
コード例 #4
0
            /// <summary>
            /// <see cref="ArucoObjectTracker.Place(int, Dictionary)"/>
            /// </summary>
            public override void Place(int cameraId, Aruco.Dictionary dictionary)
            {
                if (!IsActivated)
                {
                    return;
                }

                for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                {
                    ArucoObject foundArucoObject;
                    int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                    if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                    {
                        float positionFactor = foundArucoObject.MarkerSideLength / ESTIMATE_POSE_MARKER_LENGTH;
                        PlaceArucoObject(foundArucoObject, MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i),
                                         cameraId, positionFactor);
                    }
                }
            }
コード例 #5
0
        public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)
        {
            base.UpdateTransforms(cameraId, dictionary);

            if (MarkerRvecs[cameraId][dictionary] != null)
            {
                for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)
                {
                    ArucoObject foundArucoObject;
                    int         detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));
                    if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))
                    {
                        var localPosition = MarkerTvecs[cameraId][dictionary].At(i).ToPosition() * foundArucoObject.MarkerSideLength / estimatePoseMarkerLength;
                        arucoCameraDisplay.PlaceArucoObject(foundArucoObject.transform, cameraId, localPosition,
                                                            MarkerRvecs[cameraId][dictionary].At(i).ToRotation());
                    }
                }
            }
        }