Unity Texture2D (RGBA32) преобразование в OpenCV Mat - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь обработать снимок, который я делаю с C # в OpenCV. Для этого мне нужно конвертировать из формата Unitys Texture2D (в данном случае это RGBA32) в OpenCV's Mat.

My C # Code

unsafe{
    Color32[] textureDataColor = MLCamera.PreviewTexture2D.GetPixels32();
    fixed (Color32* p = textureDataColor){
        log("Detected Markers: " + Interop.Detect((IntPtr)p, MLCamera.PreviewTexture2D.width, MLCamera.PreviewTexture2D.height));
    }
}

My Interop

[DllImport("ml_aruco_api")]
internal static extern int Detect(IntPtr textureData, int width, int height);

И мой код C ++

extern "C" int Detect(unsigned char* textureData, int width, int height) {
    MDetector.setDictionary(Dictionary::ARUCO_MIP_36h12);
    Mat image(height, width, CV_8UC4, textureData);
    Mat img;
    cvtColor(image, img, COLOR_RGBA2BGR);
    vector<Marker> Markers = MDetector.detect(img);
    imwrite("/documents/C2/pic.jpg", img);//for debugging
    return Markers.size();
}

Полученный файл pic.jpg будет серого цвета. Что я делаю неправильно? RGBA32 означает 4 канала, 8 бит, и я думаю, что OpenCV работает в BGR? Без использования cvtColor программа просто вылетает.

...