【发布时间】:2017-10-12 16:46:47
【问题描述】:
这可能是一个非常愚蠢的问题,但我真的对此很了解。
在这里,我试图在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;
}
}
}
}
但是当我在最后三个花括号前添加以下几行时,QLabel 和 cv::window 都在显示视频。
imshow("Video",src);
char key = waitKey(10);
if(key == 'p')
playVideo = !playVideo;
if(key == 'q')
break;
但我不想用cv::window 显示。任何人都可以帮我解决它吗?我很感激任何帮助。
提前致谢。
【问题讨论】:
-
设置像素图后添加
QApplication::processEvents(); -
哇,谢谢,现在可以正常使用了。
-
很高兴它有帮助。然后作为答案添加