示例#1
0
        /// <summary>
        /// Initializes the <see cref="Images"/>, <see cref="ImageDataSizes"/>, <see cref="ImageDatas"/>,
        /// <see cref="NextImages"/>, <see cref="NextImageTextures"/> and <see cref="NextImageDatas"/> properties from the
        /// <see cref="Textures"/> property.
        /// </summary>
        protected override void OnStarted()
        {
            for (int cameraId = 0; cameraId < CameraNumber; cameraId++)
            {
                for (int bufferId = 0; bufferId < buffersCount; bufferId++)
                {
                    imageBuffers[bufferId][cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width,
                                                                  CvMatExtensions.ImageType(Textures[cameraId].format));
                }

                ImageDataSizes[cameraId] = (int)(Images[cameraId].ElemSize() * Images[cameraId].Total());
                ImageRatios[cameraId]    = Textures[cameraId].width / (float)Textures[cameraId].height;

                for (int bufferId = 0; bufferId < buffersCount; bufferId++)
                {
                    imageDataBuffers[bufferId][cameraId]      = new byte[ImageDataSizes[cameraId]];
                    imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId];
                }

                imagesToTextures[cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width,
                                                        CvMatExtensions.ImageType(Textures[cameraId].format));
                imagesToTextureDatas[cameraId]      = new byte[ImageDataSizes[cameraId]];
                imagesToTextures[cameraId].DataByte = imagesToTextureDatas[cameraId];
            }

            base.OnStarted();
        }
示例#2
0
            /// <summary>
            /// Initializes the <see cref="Images"/>, <see cref="ImageDataSizes"/>, <see cref="ImageDatas"/>, <see cref="NextImages"/>,
            /// <see cref="NextImageTextures"/> and <see cref="NextImageDatas"/> properties from the <see cref="ImageTextures"/> property.
            /// </summary>
            protected virtual void InitializeImages()
            {
                for (int cameraId = 0; cameraId < CameraNumber; cameraId++)
                {
                    for (int bufferId = 0; bufferId < buffersCount; bufferId++)
                    {
                        imageBuffers[bufferId][cameraId] = new Cv.Mat(ImageTextures[cameraId].height, ImageTextures[cameraId].width,
                                                                      CvMatExtensions.ImageType(ImageTextures[cameraId].format));
                    }

                    ImageDataSizes[cameraId] = (int)(Images[cameraId].ElemSize() * Images[cameraId].Total());
                    ImageRatios[cameraId]    = ImageTextures[cameraId].width / (float)ImageTextures[cameraId].height;

                    for (int bufferId = 0; bufferId < buffersCount; bufferId++)
                    {
                        imageDataBuffers[bufferId][cameraId]      = new byte[ImageDataSizes[cameraId]];
                        imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId];
                    }
                }
            }
示例#3
0
            /// <summary>
            /// Initializes the tracking, Activates the trackers, susbcribes to the <see cref="ArucoObjectsController{T}.ArucoObjectAdded"/> and
            /// <see cref="ArucoObjectsController{T}.ArucoObjectRemoved"/> events and starts the tracking thread.
            /// </summary>
            public override void StartController()
            {
                base.StartController();

                // Initialize the tracking
                trackingImages           = new Cv.Mat[ArucoCamera.CameraNumber];
                trackingImagesData       = new byte[ArucoCamera.CameraNumber][];
                arucoCameraImageCopyData = new byte[ArucoCamera.CameraNumber][];
                for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)
                {
                    arucoCameraImageCopyData[cameraId] = new byte[ArucoCamera.ImageDataSizes[cameraId]];
                    trackingImagesData[cameraId]       = new byte[ArucoCamera.ImageDataSizes[cameraId]];

                    Texture2D imageTexture = ArucoCamera.ImageTextures[cameraId];
                    trackingImages[cameraId]          = new Cv.Mat(imageTexture.height, imageTexture.width, CvMatExtensions.ImageType(imageTexture.format));
                    trackingImages[cameraId].DataByte = trackingImagesData[cameraId];
                }

                // Activate the trackers
                MarkerTracker.Activate(this);
                foreach (var arucoObjectDictionary in ArucoObjects)
                {
                    foreach (var arucoObject in arucoObjectDictionary.Value)
                    {
                        ArucoObjectsController_ArucoObjectAdded(arucoObject.Value);
                    }
                }

                // Subscribes to ArucoObjectsController and ArucoCamera events
                ArucoObjectAdded   += ArucoObjectsController_ArucoObjectAdded;
                ArucoObjectRemoved += ArucoObjectsController_ArucoObjectRemoved;

                arucoCameraImagesUpdated   = false;
                ArucoCamera.ImagesUpdated += ArucoCamera_ImagesUpdated;

                // Start the tracking thread
                trackingThread = new Thread(() =>
                {
                    try
                    {
                        while (IsConfigured && IsStarted)
                        {
                            trackingMutex.WaitOne();
                            Track();
                            trackingMutex.ReleaseMutex();
                        }
                    }
                    catch (Exception e)
                    {
                        trackingException = e;
                        trackingMutex.ReleaseMutex();
                    }
                });
                trackingThread.Start();

                OnStarted();
            }