2

OpenCVライブラリのメソッドを使用してフレームを再生してビデオを処理し、これらのフレームをimshowopencv/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);
             }
4

1 に答える 1

2

Qt は、制御がイベント ループに戻ったときにのみ UI を更新できます。ループ内で呼び出すことはできqApp->processEvents()ますが、それは最適な方法ではない可能性があります。

于 2012-04-24T23:24:09.787 に答える