gpt4 book ai didi

c++ - 在 Qt 中可视化来自 PMD Camboard Nano 的流

转载 作者:行者123 更新时间:2023-11-30 05:43:45 26 4
gpt4 key购买 nike

编辑:诚实的推荐如果您想实时从 PMD 流式传输,请使用 C#。任何 UI 都易于创建,并且有一个非常强大的库,MetriCam由 Metrilus AG 提供,它支持各种 3D 相机的流媒体。我可以用它获得稳定的 45 fps。

原创:

我一直在尝试从 PMD camboard nano 中获取深度信息并在 GUI 中将其可视化。信息以 165x120 float 组的形式提供。

由于我还想将数据用于分析目的(图像质量、白噪声等),因此我需要以特定的帧速率抓取帧。问题是,PMD 随相机提供的 SDK(用于 MATLAB 和 C)仅提供了通过调用

来抓取单帧的可能性
pmdUpdate(hnd);

因此帧速率取决于您轮询图像数据的频率。

我最初尝试在 MATLAB 中进行分析,但我无法从相机中获得超过 30 fps 的数据,并且在循环中添加了一些进一步的代码使得无法使用(我至少需要可靠的 25 fps) .

然后我切换到 C,在那里我获得了高达 70 fps 的速率,但无法可视化数据。

然后我用基于 C/C++ 的 Qt 进行了尝试 - 因此它应该可以快速轮询图像数据 - 并且我可以轻松地包含 PMDSDK 的库。不过,由于我是 Qt 的新手,所以我对 UI 元素了解不多。

所以我的问题是:
有没有什么高效的方法可以在 Qt-GUI 上可视化二维 float 组?如果没有,在 Visual Studio 和 C++ 中有什么有用的东西怎么样?

(我知道在 QGraphicsView 上一个一个地绘制每个像素是愚蠢的,但我试过了,我得到了 0.4 fps 的惊人帧率......)

感谢任何有用的建议!

詹尼克

最佳答案

QImage 类实际上有一个接受 uchar 指针/数组的构造函数。您只需要将我的浮点值映射到 uchar 格式的 RGB 值。

pmdGetDistances(hnd, dist, dd.img.numColumns*dd.img.numRows*sizeof(float));

uchar *imagemap = new uchar[dd.img.numColumns*dd.img.numRows*3];
int i,j;
for (i = 0; i < 165; i++){
for (j = 0; j < 120; j++){

uchar value = (uchar)std::floor(40*dist[j*165+i]);
if(value > 255 || value < 0){
value = 0;
}
//colorscaling integrated
imagemap[3*(j*165+i)] = floor((255-value)*(255-value)/255.0);
imagemap[3*(j*165+i)+1] = abs(floor((value-127)/1.5));
imagemap[3*(j*165+i)+2] = floor(value*value/255.0);
}

}

然后可以将 QImage 转换为 Pixmap 并显示在 QGraphicsView 中。这对我有用,但帧率似乎不太稳定。

QImage image(imagemap, 165, 120, 165*3, QImage::Format_RGB888);
QPixmap pmap(QPixmap::fromImage(image));

scene->addPixmap(pmap.scaled(165,120));
ui->viewCamera->update();

值得尝试让线程休眠直到所需时间过去。QThread::msleep(msec);

关于c++ - 在 Qt 中可视化来自 PMD Camboard Nano 的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30096080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com