RealSense Projection::CreateColorImageMappedToDepth returns 如果通过 AcquireAccess 访问了内部参数之一,则为空
RealSense Projection::CreateColorImageMappedToDepth returns Null if one of the parameters internals were accessed through AcquireAccess
我想做的是修改通过 PXCSManager::QuerySample() 获取的深度图像,然后将其映射到以相同方式获取的彩色图像。
这就是我正在做的事情:
void SampleProcessor::CaptureFrame(PXCSenseManager* pxcsManager, const PXCCapture::Sample* sample, char lastCapturedCharacter) {
defaultFilter(sample->depth, pxcsManager->QueryCaptureManager()->QueryDevice()->QueryDepthLowConfidenceValue());
auto result = _projection->CreateColorImageMappedToDepth(timage, sample->color);
}
void SampleProcessor::defaultFilter(PXCImage * toFilter, const pxcF32 & defaultValue) {
auto imageData = PXCImage::ImageData(); //Todo: think about removing duplication with save function. Alternative to python decorators?
if (toFilter->AcquireAccess(PXCImage::ACCESS_READ_WRITE, PXCImage::PIXEL_FORMAT_DEPTH_F32, &imageData) < PXC_STATUS_NO_ERROR) {
return;
}
filterDepth(imageData, toFilter->QueryInfo(), [](pxcF32) { return true; }, defaultValue);
toFilter->ReleaseAccess(&imageData);
}
而"result"这里总是空的。如果我只传递给投影 sample->depth,sample->color 那么它 returns 有效图像。
我做错了什么?
对于有同样问题的人来说:
我一直在用 PXCImage::ACCESS_READ_WRITE
(尽管 PXCImage::ACCESS_WRITE
也是如此)和 PXCImage::PIXEL_FORMAT_DEPTH_F32
调用 AcquireAccess
。
这导致内部像素格式从默认格式转换为 PIXEL_FORMAT_DEPTH_F32
。
并且 PXCProjection
似乎不适用于具有这种像素格式的图像(尽管它没有在文档中指定,或者至少我找不到任何提及这一点)。当用这种像素格式的图像调用时,CreateColorImageMappedToDepth
只是 returns nullptr。这真的很有用 =/.
PXCProjection::QueryUVMap
在相同的情况下 returns STATUS_PARAM_UNSUPPORTED
这提供了更多信息并促使我尝试使用像素格式。
所以总结一下:你不应该使用带有 PIXEL_FORMAT_DEPTH_F32
的图像作为 PXCProjection
的参数。
我想做的是修改通过 PXCSManager::QuerySample() 获取的深度图像,然后将其映射到以相同方式获取的彩色图像。
这就是我正在做的事情:
void SampleProcessor::CaptureFrame(PXCSenseManager* pxcsManager, const PXCCapture::Sample* sample, char lastCapturedCharacter) {
defaultFilter(sample->depth, pxcsManager->QueryCaptureManager()->QueryDevice()->QueryDepthLowConfidenceValue());
auto result = _projection->CreateColorImageMappedToDepth(timage, sample->color);
}
void SampleProcessor::defaultFilter(PXCImage * toFilter, const pxcF32 & defaultValue) {
auto imageData = PXCImage::ImageData(); //Todo: think about removing duplication with save function. Alternative to python decorators?
if (toFilter->AcquireAccess(PXCImage::ACCESS_READ_WRITE, PXCImage::PIXEL_FORMAT_DEPTH_F32, &imageData) < PXC_STATUS_NO_ERROR) {
return;
}
filterDepth(imageData, toFilter->QueryInfo(), [](pxcF32) { return true; }, defaultValue);
toFilter->ReleaseAccess(&imageData);
}
而"result"这里总是空的。如果我只传递给投影 sample->depth,sample->color 那么它 returns 有效图像。
我做错了什么?
对于有同样问题的人来说:
我一直在用 PXCImage::ACCESS_READ_WRITE
(尽管 PXCImage::ACCESS_WRITE
也是如此)和 PXCImage::PIXEL_FORMAT_DEPTH_F32
调用 AcquireAccess
。
这导致内部像素格式从默认格式转换为 PIXEL_FORMAT_DEPTH_F32
。
并且 PXCProjection
似乎不适用于具有这种像素格式的图像(尽管它没有在文档中指定,或者至少我找不到任何提及这一点)。当用这种像素格式的图像调用时,CreateColorImageMappedToDepth
只是 returns nullptr。这真的很有用 =/.
PXCProjection::QueryUVMap
在相同的情况下 returns STATUS_PARAM_UNSUPPORTED
这提供了更多信息并促使我尝试使用像素格式。
所以总结一下:你不应该使用带有 PIXEL_FORMAT_DEPTH_F32
的图像作为 PXCProjection
的参数。