Texture2D.LoadImage() с EmguCV на Unity

Я использую класс Capture из EmguCV, чтобы поместить изображение с камеры в Texture2D с помощью функции LoadImage. Перед попыткой сделать это я использовал функцию SetPixel, но она была слишком медленной.

Когда я выполняю приведенный ниже код, вместо изображения камеры появляется красный вопросительный знак на белом фоне.

Что я здесь делаю неправильно?

public class testEmguCV : MonoBehaviour
{
    private Capture capture;

    void Start() 
    {
        capture = new Capture();
    }

    void Update()
    {
        Image<Gray, Byte> currentFrame = capture.QueryGrayFrame();
        Texture2D camera = new Texture2D(400, 400);
        if (currentFrame != null)
        {
            camera.LoadImage(currentFrame.Bytes);
            renderer.material.mainTexture = camera;
        }
     }
}

person Aleph0    schedule 21.03.2014    source источник
comment
Судя по быстрому поиску, LoadImage создан для преобразования Jpgs и Png в Texture2d. Учитывая, что вы используете класс изображения emgu, я сомневаюсь, что это сработает... Возможно, сохраните изображение в потоке памяти как jpg, а затем бросьте его в LoadImage?   -  person Steven Mills    schedule 21.03.2014
comment
Спасибо, Стивен, я сделал это, и теперь это работает.   -  person Aleph0    schedule 21.03.2014


Ответы (1)


Вот изменения, которые я сделал, чтобы исправить проблему:

public class testEmguCV : MonoBehaviour
{
    private Capture capture;

    void Start() 
    {
        capture = new Capture();
    }

    void Update()
    {
        Image<Gray, Byte> currentFrame = capture.QueryGrayFrame();
        Bitmap bitmapCurrentFrame = currentFrame.ToBitmap();
        MemoryStream m = new MemoryStream();
        bitmapCurrentFrame.Save(m, bitmapCurrentFrame.RawFormat);

        Texture2D camera = new Texture2D(400, 400);
        if (currentFrame != null)
        {
            camera.LoadImage(m.ToArray());
            renderer.material.mainTexture = camera;
        }
     }
}
person Aleph0    schedule 24.03.2014
comment
У меня возникает эта ошибка при использовании вашего кода. Любое понимание? ArgumentNullException: Аргумент не может быть нулевым. Имя параметра: кодировщик System.Drawing.Image.Save (поток System.IO.Stream, кодировщик System.Drawing.Imaging.ImageCodecInfo, System.Drawing.Imaging.EncoderParameters encoderParams) System.Drawing.Image.Save (System.IO.Stream поток, формат System.Drawing.Imaging.ImageFormat) (оболочка, вызывающая удаленное взаимодействие с проверкой) System.Drawing.Image:Save (System.IO.Stream,System.Drawing.Imaging.ImageFormat) Script.Update() (at Активы/Script.cs:61) - person tcboy88; 07.10.2014
comment
Я решил проблему при использовании system.drawing.dll из папки установки Unity. - person tcboy88; 07.10.2014