Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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
在Qt-GUI中显示实时摄像机图像_Qt_Video_Refresh_Qimage_Qlabel - Fatal编程技术网

在Qt-GUI中显示实时摄像机图像

在Qt-GUI中显示实时摄像机图像,qt,video,refresh,qimage,qlabel,Qt,Video,Refresh,Qimage,Qlabel,我正在尝试制作一个应用程序,它可以拍摄摄像机录制的实时图像,并使用QtGUI将其显示在屏幕上。摄像头驱动程序和api为我提供了刷新指针显示的内存块的功能。 问题是我的图像在使用Qimage制作的Qlabel中不会刷新(下面的代码) 如何才能刷新QLabel?问题在于,您创建的标签小部件内部有一个静态图像。包含的图像不再“连接”到您的相机,而是视频流帧的副本。为了使QLabel更新自身,您必须不断地用新图像替换包含的图像。例如,您可以为此设置计时器: MyClass:MyClass() {

我正在尝试制作一个应用程序,它可以拍摄摄像机录制的实时图像,并使用QtGUI将其显示在屏幕上。摄像头驱动程序和api为我提供了刷新指针显示的内存块的功能。 问题是我的图像在使用Qimage制作的Qlabel中不会刷新(下面的代码)


如何才能刷新QLabel?

问题在于,您创建的标签小部件内部有一个静态图像。包含的图像不再“连接”到您的相机,而是视频流帧的副本。为了使
QLabel
更新自身,您必须不断地用新图像替换包含的图像。例如,您可以为此设置计时器:

MyClass:MyClass()
{
    QTimer *timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(10); // Defines how often update the label.

    myLabel = new QLabel;
    [..]
}

// Slot
MyClass::update()
{
    QImage myImage(raw_image_data_pointer, 768, 576, QImage::Format_RGB32 );
    myLabel.setPixmap(QPixmap::fromImage(myImage));
}

问题是,您创建的标签小部件内部有一个静态图像。包含的图像不再“连接”到您的相机,而是视频流帧的副本。为了使
QLabel
更新自身,您必须不断地用新图像替换包含的图像。例如,您可以为此设置计时器:

MyClass:MyClass()
{
    QTimer *timer = new QTimer;
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(10); // Defines how often update the label.

    myLabel = new QLabel;
    [..]
}

// Slot
MyClass::update()
{
    QImage myImage(raw_image_data_pointer, 768, 576, QImage::Format_RGB32 );
    myLabel.setPixmap(QPixmap::fromImage(myImage));
}

您尝试过showEvent/paintEvent/update吗?您尝试过showEvent/paintEvent/update吗?谢谢,它完全有效。我尝试了类似的方法,但使用了while循环,而不是来自计时器的信号,但从读取的数据(也经历过)来看,while循环阻塞qt事件循环存在问题。你能想出任何其他方法来刷新屏幕而不是“每X次”?@MarcinKorn:需要注意的是,你不会“每X次”刷新屏幕。屏幕刷新与标签“刷新”不同。除了捕捉相机信号并在数据可用时触发更新之外,我想不出任何其他方法来解决这个问题,但这可能不会使渲染始终处于繁忙状态。这取决于你是如何获得这些相机图像的,等等。谢谢你,它完全起作用了。我尝试了类似的方法,但使用了while循环,而不是来自计时器的信号,但从读取的数据(也经历过)来看,while循环阻塞qt事件循环存在问题。你能想出任何其他方法来刷新屏幕而不是“每X次”?@MarcinKorn:需要注意的是,你不会“每X次”刷新屏幕。屏幕刷新与标签“刷新”不同。除了捕捉相机信号并在数据可用时触发更新之外,我想不出任何其他方法来解决这个问题,但这可能不会使渲染始终处于繁忙状态。这取决于您如何获取这些相机图像等。