我正在尝试通过 OpenCV 库的方法播放其帧来处理视频,并使用imshow
opencv/highgui 的方法显示这些帧,这里没有问题。
但是当涉及到使用 Qt-gui 应用程序实时显示它们时,我无法管理。
程序从 openfile 对话框中获取视频的路径,并开始在 while 循环中抓取视频的帧并处理它们。在处理步骤之后,当我尝试在 QLabel 上显示这些处理过的帧时,gui-app 的 QLabel 不显示任何内容(沿着视频的长度),而只显示视频末尾的最后一帧,没有别的。我尝试刷新/更新每一帧的标签,但没有奏效。
我错过了一些事情要做吗?或者有什么更方便的方法吗?
我的代码的必要部分如下。提前致谢。
bool stop=false;
cv::VideoCapture capture("a.avi");
cv::Mat cur_frame;
while (!stop) {
//...
capture.read(cur_frame);
//process steps..
QImage img= QImage((const unsigned char*)(cur_frame.data),
cur_frame.cols,cur_frame.rows,
QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(img));
// resize the label to fit the image
ui->label->resize(ui->label->pixmap()->size());
//...
cv::waitkey(50);
}