/// <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(); }
/// <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]; } } }
/// <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(); }