Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中可视化来自PMD纳米板的流_C++_Qt_User Interface_Graphics_Video Streaming - Fatal编程技术网

C++ 在Qt中可视化来自PMD纳米板的流

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); 因此帧率取决于轮询图像数

编辑:诚实推荐 如果要从PMD实时传输数据,请使用C#。任何用户界面都很容易创建,而且Metrilus AG提供了一个强大的库,支持各种3D相机的流媒体。我可以得到稳定的45帧每秒

原件:

我一直在尝试从图形用户界面中获取深度信息并将其可视化。信息以165x120浮点数组的形式传递

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

pmdUpdate(hnd);
因此帧率取决于轮询图像数据的频率

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

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

然后我用基于C/C++的Qt进行了尝试——因此它应该能够快速轮询图像数据——在这里我可以很容易地包含PMDSDK的库。不过,由于我对Qt不熟悉,我对UI元素了解不多

所以我的问题是:
在QtGUI上,有没有一种高效的方式来可视化2D浮点数组?如果不是,那么在VisualStudio中用C++(

)有用的东西呢? (我知道在QGraphicsView上一个接一个地绘制每个像素是愚蠢的,但我试过了,我得到了惊人的.4fps帧速率…)

谢谢你的建议


Jannik

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);
    }

}
可能值得尝试发送休眠线程,直到经过所需的时间。
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();