Я пытаюсь отобразить координаты из цветового пространства в пространство камеры. код я использую следующее:Kinect v2 сопоставление цветовых координат с пространством камеры
HRESULT ModelRecognizer::MapColorToCameraCoordinates(const std::vector<ColorSpacePoint>& colorsps, std::vector<CameraSpacePoint>& camerasps)
{
//Access frame
HRESULT hr = GetDepthFrame();
if (SUCCEEDED(hr))
{
ICoordinateMapper* pMapper;
hr = m_pKinectSensor->get_CoordinateMapper(&pMapper);
if (SUCCEEDED(hr))
{
CameraSpacePoint* cameraSpacePoints = new CameraSpacePoint[cColorWidth * cColorHeight];
hr = pMapper->MapColorFrameToCameraSpace(nDepthWidth * nDepthHeight, depthImageBuffer, cColorWidth * cColorHeight, cameraSpacePoints);
if (SUCCEEDED(hr))
{
for (ColorSpacePoint colorsp : colorsps)
{
long colorIndex = (long)(colorsp.Y * cColorWidth + colorsp.X);
CameraSpacePoint csp = cameraSpacePoints[colorIndex];
camerasps.push_back(csp);
}
}
delete[] cameraSpacePoints;
}
}
ReleaseDepthFrame();
return hr;
}
Я не получаю никаких ошибок, однако, результат, кажется, поворачивается на 180 градусов и имеет смещение. У кого-нибудь есть предложения, что я делаю неправильно? Любая помощь приветствуется.
Просто чтобы дать большую картину, почему мне нужно это:
Я отслеживание цветных ленты наклеены на стол из цветного изображения с использованием открытого резюме. Затем я создаю стены в местах ленты в трехмерной сетке. Кроме того, я использую KinectFusion для создания сетки других объектов в таблице. Однако, когда я открываю обе сетки в Мешлабе, отчетливо видно несоосность. Поскольку я предполагаю, что сетка KinectFusion создана правильно в CameraSpace, и я создаю сетку стен точно в CameraSpacePoints, возвращенных вышеуказанной функцией, я уверен, что ошибка заключается в процедуре CoordinateMapping.
изображения, показывающие смещение можно найти на http://imgur.com/UsrEdZb,ZseN2br#0, http://imgur.com/UsrEdZb,ZseN2br#1
Работал его. https://msdn.microsoft.com/en-us/library/windowspreview.kinect.cameraspacepoint.aspx Что касается датчика, X + находится слева, как он видит, Y + находится к небу, и Z + находится вдали от датчика. Таким образом, ваши координаты могут работать иначе, чем это. Для моих целей, используя openframeworks, ваша коррекция выравнивает X, Y и Z. –
благодарит вас за разъяснение @NickDevereaux :) Еще немного странно, что они решили поставить X + слева. – Heribert