매우 어리석은 문제 일 수 있습니다. 그러나이 문제는 실제로 발생합니다.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;
}
}
}
}
그러나 QLabel
및 cv::window
비디오를 표시하는 두 나는 지난 3 중괄호 브래킷하기 전에 다음 몇 줄을 추가 할 때.
imshow("Video",src);
char key = waitKey(10);
if(key == 'p')
playVideo = !playVideo;
if(key == 'q')
break;
그러나 cv::window
으로 표시하고 싶지 않습니다. 아무도 내가 고칠 수 있도록 도와 줄 수 있습니까? 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다.
의 (a '의 QApplication :: processEvents 추가)을 수행 중입니다 때 가끔이 함수를 호출 할 수는, 당신은 픽스맵을 설정 한 후' – Miki
와우, 감사합니다, 지금은 잘 작동 . – Gansroy
도움이 되니 기쁩니다. 그 때 대답으로 추가됨 – Miki