2014-01-02 1 views
2

У меня есть большая проблема, которую я не могу решить самостоятельно. Сам OpenCV отлично работает, но я не могу загружать видео. Вот мой код:Qt 5.2/OpenCV 2.4.8 - Не удается открыть видео файлы через VideoCapture

PRO- Файл

QT  += core gui 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = videoredux 
TEMPLATE = app 

INCLUDEPATH += C:/OpenCV/opencv_bin/install/include 
LIBS += -LC:\\OpenCV\\opencv_bin\\bin \ 
    libopencv_core248d \ 
    libopencv_highgui248d \ 
    libopencv_imgproc248d \ 
    libopencv_features2d248d \ 
    libopencv_calib3d248d \ 
    libopencv_video248d \ 


SOURCES += main.cpp\ 
     mainwindow.cpp 

HEADERS += mainwindow.h 

FORMS += mainwindow.ui 

и MainWindow Класс:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QFileDialog> 
#include <iostream> 
#include <qdebug.h> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv/cv.h> 


MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    ui->videoStatusLabel->setText("Kein Video geladen."); 

    // SIGNALS & SLOTS 

    QObject::connect(ui->chooseVideoButton,SIGNAL(clicked()), 
       this,SLOT(chooseVideo())); 
    QObject::connect(ui->startButton,SIGNAL(clicked()), 
       this,SLOT(startProcess())); 

} 

void MainWindow::chooseVideo(){ 

    QString fileName = QFileDialog::getOpenFileName(this, 
     tr("Open Video"), "/home", tr("Video Files (*.avi *.mp4 *.mpeg *.mpg)")); 
    qDebug() << "Path:" << fileName; 
    ui->videoStatusLabel->setText(fileName); 
} 

void MainWindow::startProcess(){ 
    QString videoPath = ui->videoStatusLabel->text(); 
    QFileInfo video(videoPath); 
    if(video.exists()){ 
     const std::string path = videoPath.toUtf8().constData(); 
     cv::VideoCapture capture(path); 
     cv::Mat frame; 

     if(!capture.isOpened()){ 
      qDebug() << "Error, video not loaded"; 
     } 

     cv::namedWindow("window",1); 
     while(true) 
     { 
      bool success = capture.read(frame); 
      if(success == false){ 
       break; 
      } 
      cv::imshow("window",frame); 
      cv::waitKey(20); 
     } 
     cv::waitKey(0); 
    } 
    else{ 
     qDebug() << "Error, File doesn't exist"; 
    } 
} 

Пути правильно, я перепробовал много различных форматов видео, но он никогда не загружает видео. Я запускаю Qt на компьютере под управлением Windows 8, и у меня есть «K-Lite Codec Pack 10.2.0 Basic» и ffmpeg. Видео воспроизводятся правильно с моими видеоплеерами. Я также попытался скопировать .dll в рабочий каталог, найти opencv dll в каталоге system32 и перестроить OpenCV с помощью mingw на этом компьютере. Я знаю, что у многих людей есть те же проблемы, но ни одно из их предложений не разрешило это. кто-нибудь знает, как решить эту проблему?

спасибо!

Надин

---- UPDATE ---- Я до сих пор не может открывать видео файлы, так что я запрограммировал приложение на системе 64-Bit Windows7. Он работал нормально, но когда я пытаюсь открыть приложение на компьютере под управлением Windows8, он все равно не может открыть файл. Неважно, какие кодеки установлены, поскольку он обычно работает на каждом компьютере Windows7 и не работает на каждом компьютере под управлением Windows8. То же самое для старых версий OpenCV. Есть ли общая проблема с OpenCV и Windows8?

+0

«но ни одно из их предложений не решило его» -> Пожалуйста, уточните, что именно вы пробовали. Off-topic: 'QT + = core gui' можно удалить, так как по умолчанию добавлены core и gui. Смешно :) 'ui-> videoStatusLabel-> setText (« Kein Video geladen. »);' Вместо этого вы можете использовать QObject :: tr(). – lpapp

+0

«/ home» также сильно жестко закодирован. Во всяком случае, получаете ли вы эту ошибку или какую? «Ошибка, видео не загружено»? – lpapp

+0

Извините, все, что я уже пробовал, перечислены в тексте =) Это: установка новых кодеков, поиск различных видеоформатов, копирование dll в рабочий каталог, восстановление OpenCV (я также проверил, не пропустил ли параметр WITH_FFMPEG, но я не сделал) .. и так далее. Я близок к отчаянию = ( – Zamahra

ответ

0

Я не знаю, нужен ли кому-то еще ответ, но вот как я решил эту проблему.

Я просто скопировал opencv_ffmpegXXX.dll в каталог с .exe-файлом. Мне потребовались дни, чтобы это выяснить. Спасибо за все ваши ответы и помощь!

1

У меня была та же проблема. Теперь он решен. Нам нужно установить правильные кодеки по предложению OpenCV по адресу http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html. Проверьте раздел VideoWriter :: VideoWriter. Нам нужны видеокодеки от FOURCC по адресу http://www.fourcc.org/codecs.php. Быть осторожен. Установка может установить мусор, а также кодеки. Не все кодеки распознаются. По крайней мере, теперь у меня есть mpeg4 и DivX и вы можете открыть Megamind.avi, используемую собственной демонстрационной программой OpenCV.