これは非常にばかげた問題かもしれませんが、私は本当にこの上にスタックしています。QLabelはビデオを表示していません
ここでは、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;
}
}
}
}
しかし、私は最後の3つの中括弧ブラケットの前に次の数行を追加したとき、QLabel
とcv::window
の両方がビデオを表示しています。
imshow("Video",src);
char key = waitKey(10);
if(key == 'p')
playVideo = !playVideo;
if(key == 'q')
break;
しかし、私はcv::window
と表示したくありません。誰でも私がそれを修正するのを助けることができる?私はどんな助けにも感謝します。 ありがとうございます。
を実行するビジー状態のときは、時折、この関数を呼び出すことができ;'あなたが – Miki
うわー、ありがとうピックスマップを設定した後、それが今で正常に動作します。 – Gansroy
喜んで助けました。その後、回答として追加されました – Miki