如果通过AcquireAccess访问其中一个参数内部,则RealSense Projection :: CreateColorImageMappedToDepth返回Null

时间:2015-09-06 14:34:20

标签: c++ image-processing intel realsense

我尝试做的是修改通过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);
}

&#34;结果&#34;这里总是空的。如果我传递给投影只是sample-&gt; depth,sample-&gt; color,那么它将返回有效图像。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

所以对于遇到同样麻烦的人:

我一直使用AcquireAccess致电PXCImage::ACCESS_READ_WRITEPXCImage::ACCESS_WRITE}和PXCImage::PIXEL_FORMAT_DEPTH_F32同样如此。

这导致内部像素格式从默认转换为PIXEL_FORMAT_DEPTH_F32

似乎PXCProjection不能处理具有此像素格式的图像(虽然它没有在文档中指定,或者至少我找不到任何提及此内容)。当使用具有此像素格式的图像调用时,CreateColorImageMappedToDepth只返回nullptr。这真的是提供信息= /。

同样情况下的

PXCProjection::QueryUVMap会返回STATUS_PARAM_UNSUPPORTED,这会提供更多信息,并让我尝试使用像素格式。

总而言之:您不应将PIXEL_FORMAT_DEPTH_F32的图片用作PXCProjection的参数。