Я хочу получить доступ к камере (ПК или мобильному устройству) до того, как будет выполнено распознавание. Я хочу изменить значение пикселей в зависимости от яркости и контрастности. Моя цель - оптимизировать отслеживание с помощью vuforia, растягивая или выравнивая значения в виде гистограммы при изменении освещения.
Я получаю значения пикселей из Изображение камеры Vuforia:
Мне удалось восстановить значения пикселей изображения, но я не могу их изменить.
Я пробовал этот метод, чтобы установить для всех пикселей значение 0 в методе OnTrackablesUpdated: image.Pixels.SetValue(byte value, index);
Мое распознавание снова работает, оно не должно работать, если все мои пиксели равны нулю.
Как я могу изменить значения пикселей камеры?
Вот мой код:
using UnityEngine;
using System.Collections;
using Vuforia;
using System;
public class CameraImageAccess : MonoBehaviour
{
private Image.PIXEL_FORMAT mPixelFormat = Image.PIXEL_FORMAT.UNKNOWN_FORMAT;
private bool mAccessCameraImage = true;
private bool mFormatRegistered = false;
void Start()
{
mPixelFormat = Image.PIXEL_FORMAT.RGB888; // Use RGB888 for mobile
// Register Vuforia life-cycle callbacks:
VuforiaARController.Instance.RegisterVuforiaStartedCallback(OnVuforiaStarted);
VuforiaARController.Instance.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated);
VuforiaARController.Instance.RegisterOnPauseCallback(OnPause);
}
void OnVuforiaStarted()
{
// Try register camera image format
if (CameraDevice.Instance.SetFrameFormat(mPixelFormat, true))
{
Debug.Log("Successfully registered pixel format " + mPixelFormat.ToString());
mFormatRegistered = true;
}
else
{
Debug.LogError(
"\nFailed to register pixel format: " + mPixelFormat.ToString() +
"\nThe format may be unsupported by your device." +
"\nConsider using a different pixel format.\n");
mFormatRegistered = false;
}
}
/// <summary>
/// Called each time the Vuforia state is updated
/// </summary>
void OnTrackablesUpdated()
{
if (mFormatRegistered)
{
if (mAccessCameraImage)
{
Vuforia.Image image = CameraDevice.Instance.GetCameraImage(mPixelFormat);
if (image != null)
{
byte[] pixels = image.Pixels;
}
}
}
}
/// <summary>
/// Called when app is paused / resumed
/// </summary>
void OnPause(bool paused)
{
if (paused)
{
Debug.Log("App was paused");
UnregisterFormat();
}
else
{
Debug.Log("App was resumed");
RegisterFormat();
}
}
/// <summary>
/// Register the camera pixel format
/// </summary>
void RegisterFormat()
{
if (CameraDevice.Instance.SetFrameFormat(mPixelFormat, true))
{
Debug.Log("Successfully registered camera pixel format " + mPixelFormat.ToString());
mFormatRegistered = true;
}
else
{
Debug.LogError("Failed to register camera pixel format " + mPixelFormat.ToString());
mFormatRegistered = false;
}
}
/// <summary>
/// Unregister the camera pixel format (e.g. call this when app is paused)
/// </summary>
void UnregisterFormat()
{
Debug.Log("Unregistering camera pixel format " + mPixelFormat.ToString());
CameraDevice.Instance.SetFrameFormat(mPixelFormat, false);
mFormatRegistered = false;
}
}
Вы нашли решение для установки значений пикселей?