0

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

并且这里的“结果”始终为空。如果我只传递给投影样本->深度,样本->颜色,那么它会返回有效图像。

我在这里做错了什么?

4

1 回答 1

1

所以对于任何有同样问题的人:

我一直在打电话AcquireAccessPXCImage::ACCESS_READ_WRITE虽然同样如此PXCImage::ACCESS_WRITE)和PXCImage::PIXEL_FORMAT_DEPTH_F32

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

而且似乎PXCProjection不适用于具有这种像素格式的图像(尽管文档中没有指定,或者至少我找不到任何提及)。并且CreateColorImageMappedToDepth在使用这种像素格式的图像调用时只返回 nullptr。这真的很丰富=/。

PXCProjection::QueryUVMap在相同的情况下返回STATUS_PARAM_UNSUPPORTED,这会提供更多信息,并让我尝试使用像素格式。

所以总结一下:你不应该使用带有PIXEL_FORMAT_DEPTH_F32as 参数的图像PXCProjection

于 2015-09-07T17:51:39.757 回答