Я начинаю программировать с openni и открывать cv Я работаю с kinect. здесь часть кода, которую я использую для получения карты глубины данных (она работает) Теперь мой вопрос: Как я могу получить карту дефтов как изображение взамен? мои данные находятся на DepthPixel * pDepth1, и я хочу отобразить изображение карты глубины (потому что я хочу ее сохранить). Спасибополучить карту глубины из данных глубины kinect openni open cv
VideoFrameRef frame;
DepthPixel* pDepth1 = NULL;
DepthPixel* pDepth2 = NULL;
for (int i = 0; i < 2; i++)
{
int changedStreamDummy;
VideoStream* pStream = &depth;
rc = OpenNI::waitForAnyStream(&pStream, 1, &changedStreamDummy, SAMPLE_READ_WAIT_TIMEOUT);
if (rc != STATUS_OK)
{
printf("Wait failed! (timeout is %d ms)\n%s\n", SAMPLE_READ_WAIT_TIMEOUT, OpenNI::getExtendedError());
continue;
}
rc = depth.readFrame(&frame);
if (rc != STATUS_OK)
{
printf("Read failed!\n%s\n", OpenNI::getExtendedError());
continue;
}
if (frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_1_MM && frame.getVideoMode().getPixelFormat() != PIXEL_FORMAT_DEPTH_100_UM)
{
printf("Unexpected frame format\n");
continue;
}
if (i == 0){
int dummy;
cout << "Press any key to take first pic: ";
cin >> dummy;
pDepth1 = (DepthPixel*)frame.getData();
}
else{
int dummy;
cout << "Press any key to take second pic: ";
cin >> dummy;
pDepth2 = (DepthPixel*)frame.getData();
}
Насколько я помню, OpenNI поставляет карты глубины kinect с целым числом без знака 16 бит, поэтому CV_16U. Попробуйте 'cv :: Mat depth (frame_height, frame_width, CV_16U, reinterpret_cast (pDepth1));'. Если это сработает, вы можете сохранить его на диск, но не забудьте проверить, как OpenCV конвертирует изображения перед сохранением, возможно, вам придется вручную конвертировать в CV_8U раньше (и потерять точность) или использовать другую библиотеку для сохранения изображений. –
Micka
Я не хочу сохранять на диск, я просто хочу показать результат – user1876275
Знаете ли вы, как это сделать? спасибо! – user1876275