Изображение Emgucv для LoadRawTextureData - PullRequest
0 голосов
/ 30 июня 2018

Мне нужна помощь для преобразования изображения Emgucv videoCapture в LoadRawTextureData of Unity для отображения изображений / видео в Unity3d 2018.1.

Я могу отображать изображения, но они показывают странные линии и искаженные эффекты изображения или какое-то затвор / рассеяние.

Я прочитал вопрос в этом посте и применил решение, но проблема не решена Конвертировать Mat в Texture2d (Stackoverflow)

Я думаю, что цветное пространство изображения Emgucv не совпало с texture2d.

Код:

void Start () {
    vc = new VideoCapture(0);

    vc.FlipVertical = true;    //The image I am getting from webcam is flipped 
    myMaterial = GetComponent<Renderer>().material;

    frameHeight = (int)vc.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameHeight);
    frameWidth = (int)vc.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameWidth);

    camera = new Texture2D(frameHeight,frameWidth, TextureFormat.RGB24, false,false);

}

Я получаю изображения в этой части кода и преобразовываю цветовое пространство в соответствии с форматом texture2d.

void Update () {
    Mat secondimage = new Mat();
    Mat myimage = vc.QueryFrame();

    CvInvoke.CvtColor(myimage, secondimage, Emgu.CV.CvEnum.ColorConversion.Bgr2Rgb);
    Image<Rgb, byte> hello = secondimage.ToImage<Rgb, byte>();
    camera.LoadRawTextureData(hello.bytes);
    camera.Apply();
    myMaterial.mainTexture = camera;
}

Результаты:

Результат довольно странный, взгляните на следующие изображения результатов. Это моя рука перед камерой. Это оригинальное изображение texture2d.

Изображение1

Это изображение отображается на трехмерной плоскости в unity3d.

Image2

Как объясняет код, я уже конвертировал изображение Bgr2Rgb .

обновление:

Я просто поменяю ширину и высоту в texture2d и вау, это сработало.

camera = new Texture2D(frameWidth, frameHeight, TextureFormat.RGB24,false,false);
...