gpt4 book ai didi

c++ - QLabel 不显示视频

转载 作者:行者123 更新时间:2023-11-28 04:58:12 27 4
gpt4 key购买 nike

这可能是一个非常愚蠢的问题,但我真的很擅长这个。

在这里,我试图在 QLabel 中逐帧显示视频。在用户界面中,有一个QPushButton,用户可以通过点击它来选择视频。然后获取视频文件的QString,然后将其转换为cv::String,以便使用OpenCV库加载视频。加载后,cv::video 中的每个 Mat3b 类型的帧都被转换为 QImage,以便这些帧可以显示在一个 QLabel。但是当我运行这个程序时,QLabel 没有显示视频。片刻之后,它崩溃了,显示 Project.exe 没有响应。这可能有点复杂,但这样做是为了在需要时可以将一些特定的 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在循环内部,其中:

Processes all pending events for the calling thread [...].

You can call this function occasionally when your program is busy performing a long operation

关于c++ - QLabel 不显示视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46714936/

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