PyArray_SimpleNewFromData от uint8_t до NPY_UINT16. Работает на Linux, но не на Windows - PullRequest
0 голосов
/ 15 октября 2019

Я использую Kinect 4 Azure SDK с оболочкой Python K4A. Тип d для глубины равен uint16. Это работает на Linux, но не на Windows. В Windows полученное изображение выглядит как псевдоним. Один пиксель из двух черный.

Что может заставить этот код вести себя по-разному в Linux и Windows?

Это соответствующий код в оболочке:

    uint8_t* buffer = k4a_image_get_buffer(depth_image);
    npy_intp dims[2];
    dims[0] = k4a_image_get_height_pixels(depth_image);
    dims[1] = k4a_image_get_width_pixels(depth_image);
    PyArrayObject* np_depth_image = (PyArrayObject*) 
    PyArray_SimpleNewFromData(2, (npy_intp*) dims, NPY_UINT16, buffer);
    return PyArray_Return(np_depth_image);

https://github.com/etiennedub/pyk4a/blob/master/pyk4a/pyk4a.cpp#L161

Я попытался изменить первую строку, как мы видим в kinect 4 azure sdk

    uint16_t* buffer = (uint16_t*)(void*) k4a_image_get_buffer(depth_image);

https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/82b850ba3c6c5fcebb3e74679896546029379dc5/examples/undistort/main.cpp#L237

Возможно, это можно решить с помощью битового сдвига илипохоже, но я бы предпочел понять, почему поведение в Windows отличается.

Есть идеи?

1 Ответ

0 голосов
/ 15 октября 2019

Пришлось обновить драйверы GPU устройства Surface Pro. https://github.com/microsoft/Azure-Kinect-Sensor-SDK/issues/840

...