C++ 在Qt中可视化来自PMD纳米板的流
编辑:诚实推荐 如果要从PMD实时传输数据,请使用C#。任何用户界面都很容易创建,而且Metrilus AG提供了一个强大的库,支持各种3D相机的流媒体。我可以得到稳定的45帧每秒 原件: 我一直在尝试从图形用户界面中获取深度信息并将其可视化。信息以165x120浮点数组的形式传递 由于我还想将数据用于分析目的(图像质量、白噪声等),因此需要以特定的帧速率抓取帧。问题是,PMD随摄像头提供的SDK(用于MATLAB&C)只提供了通过调用C++ 在Qt中可视化来自PMD纳米板的流,c++,qt,user-interface,graphics,video-streaming,C++,Qt,User Interface,Graphics,Video Streaming,编辑:诚实推荐 如果要从PMD实时传输数据,请使用C#。任何用户界面都很容易创建,而且Metrilus AG提供了一个强大的库,支持各种3D相机的流媒体。我可以得到稳定的45帧每秒 原件: 我一直在尝试从图形用户界面中获取深度信息并将其可视化。信息以165x120浮点数组的形式传递 由于我还想将数据用于分析目的(图像质量、白噪声等),因此需要以特定的帧速率抓取帧。问题是,PMD随摄像头提供的SDK(用于MATLAB&C)只提供了通过调用 pmdUpdate(hnd); 因此帧率取决于轮询图像数
pmdUpdate(hnd);
因此帧率取决于轮询图像数据的频率
我最初尝试在MATLAB中进行分析,但我无法从相机中获得超过30 fps的速度,并且在循环中添加一些进一步的代码使其无法使用(我需要至少可靠的25 fps)
然后我切换到C,在那里我获得了高达70 fps的速率,但无法可视化数据
然后我用基于C/C++的Qt进行了尝试——因此它应该能够快速轮询图像数据——在这里我可以很容易地包含PMDSDK的库。不过,由于我对Qt不熟悉,我对UI元素了解不多
所以我的问题是:在QtGUI上,有没有一种高效的方式来可视化2D浮点数组?如果不是,那么在VisualStudio中用C++()有用的东西呢? (我知道在QGraphicsView上一个接一个地绘制每个像素是愚蠢的,但我试过了,我得到了惊人的.4fps帧速率…) 谢谢你的建议
JannikQImage类实际上有一个接受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);
}
}
可能值得尝试发送休眠线程,直到经过所需的时间。QThread::msleep(毫秒)代码>
QImage image(imagemap, 165, 120, 165*3, QImage::Format_RGB888);
QPixmap pmap(QPixmap::fromImage(image));
scene->addPixmap(pmap.scaled(165,120));
ui->viewCamera->update();