繁体   English   中英

QLabel没有显示视频

[英]QLabel is not displaying video

这可能是一个非常愚蠢的问题,但是我对此确实感到很困惑。

在这里,我试图在QLabel逐帧显示视频。 在用户界面中,单击一个QPushButton即可选择视频。 然后获取视频文件的QString ,然后将其转换为cv::String以便可以使用OpenCV库加载视频。 加载后, cv::video每个Mat3b类型的帧都将转换为QImage ,以便可以在QLabel显示这些帧。 但是,当我运行该程序时, QLabel没有显示视频。 片刻之后,它粉碎显示Project.exe is not responding 这可能有点复杂,但是已经这样做了,因此,如果需要,可以将某些特定的OpenCV方法应用于每个帧。 这是一些代码,对此负责。

void MainWindow::on_Browse_clicked()
{
    QFileDialog dialog(this);
    dialog.setNameFilter(tr("Videos (*.avi)"));
    dialog.setViewMode(QFileDialog::Detail);
    QString videofileName = QFileDialog::getOpenFileName(this, tr("Open 
    File"), "C:/", tr("Videos (*.avi)"));

    if(!videofileName.isEmpty())
    {
        String videopath;        
        videopath = videofileName.toLocal8Bit().constData();

        bool playVideo = true;
        VideoCapture cap(videopath);
        if(!cap.isOpened())
        {
            QMessageBox::warning(this, tr("Warning"),tr("Error loadeing 
            video."));
            exit(0);
        } 
        Mat frame;

        while(1)
        {
            if(playVideo)
               cap >> frame;

            Mat3b src=frame;
            QImage dest= Mat3b2QImage(src); //To convert Mat3b to QImage

            ui->label->setPixmap(QPixmap::fromImage(dest));

            if(frame.empty())
            {
                QMessageBox::warning(this, tr("Warning"),tr("Video frame 
                cannot be openned."));
                break;
            }
        }
    }
}

但是,当我在最后三个花括号之前添加以下几行时, QLabelcv::window都在显示视频。

             imshow("Video",src);
             char key = waitKey(10);
             if(key == 'p')
                playVideo = !playVideo;
             if(key == 'q')
                break; 

但我不想与cv::window一起显示。 谁能帮我解决这个问题? 感谢您的帮助。 提前致谢。

GUI线程在无限while循环中很忙,因此您永远不会给Qt有机会更新GUI。

您应该在循环内添加QApplication::processEvents ,其中:

处理调用线程[...]的所有未决事件。

当程序忙于执行长时间操作时,有时可以调用此函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM