Как заполнить Матрицу в OpenCV массивом глубины Pixel OpenNi

У меня проблема с OpenCV. После получения кадра глубины от kinect я пытаюсь заполнить матрицу (Mat of OpenCV) данными, возвращаемыми frame.getData ().

Проблема в том, что данные в матрице глубины не совпадают с данными, содержащимися в массиве p1 (из frame.getData ()).

Кто-нибудь знает, почему это, или как я должен заполнить свою Матрицу, чтобы получить правильный результат.

DepthPixel* p1 = (DepthPixel*)frame.getData(); 
Mat depthMat = Mat(frame.getHeight(), frame.getWidth(), CV_16U, p1);

1 ответ

Я проверил этот код с моей простой программой, и он отлично работает. Имейте в виду, однако, что вы делаете бросок. Функция getData() возвращает const void * что вы приводите неконстантный указатель. Это не очень хорошая практика. В документации неясно, возвращаются ли данные, на которые указывает указатель, getData() имеет бесконечную продолжительность жизни.

Лучший способ сделать это - скопировать данные в буфер, а затем использовать этот буфер для инициализации cv::Mat

   depth.readFrame(&depthFrame);
   DepthPixel *depthPixels = new DepthPixel[depthFrame.getHeight()*depthFrame.getWidth()];
   memcpy(depthPixels, depthFrame.getData(), depthFrame.getHeight()*depthFrame.getWidth()*sizeof(uint16_t));

   cv::Mat depthImage(depthFrame.getHeight(), depthFrame.getWidth(), CV_16U, depthPixels);
Другие вопросы по тегам