В настоящее время я использую QTCreator версии 4.7.4 для написания приложения с графическим интерфейсом, которое воспроизводит AVI-файлы внутри приложения.
Я делаю это, устанавливая каждый кадр как QPixmap внутри QLabel.
video.load("lk",video.EXT_AVI);
if(video.hasLoaded()){
while(!video.hasFinished()){
frame = video.getCurrentFrame();
cv::cvtColor(frame, frame, CV_BGR2RGB);
QImage myImage = QImage( (const unsigned char*) (frame.data),frame.cols, frame.rows, frame.step1(),QImage::Format_RGB888 );
ui->displayLabel->setPixmap((QPixmap::fromImage(myImage)));
video.nextFrame();
}
}
Поскольку я использую класс VideoCapture из API opencv для получения каждого кадра, кадры первоначально извлекаются как объекты CV :: MAT, поэтому я преобразую их в QImages.
Я могу нормально воспроизводить файлы, если использую функции CV :: imshow () из opencv API в простой консольной программе, но когда я запускаю приведенный выше код в цикле, моя программа по существу происходит сбой до последнего кадра, где он затем возвращается в стабильное состояние, показывая самый последний кадр.
Я довольно новичок в C ++, но имею хороший опыт работы с Java, поэтому мое первоначальное предположение для этой проблемы будет состоять в том, что все делается в потоке событий и, следовательно, занимает все ресурсы, вызывая остановку приложения отвечая на некоторое время.
Любая помощь будет оценена.
Примечание: video - это мой собственный класс, который инкапсулирует класс VideoCapture из API opencv.