Qt 5.2 / OpenCV 2.4.8 - 无法通过VideoCapture打开视频文件

时间:2014-01-02 21:31:17

标签: c++ qt opencv ffmpeg qtgui

我有一个很大的问题,我自己无法解决。 OpenCV本身运行正常,但我无法加载视频。这是我的代码:

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";
    }
}

路径是正确的,我尝试了许多不同的视频格式,但他从不加载视频。我在Windows 8机器上运行Qt,我安装了“K-Lite Codec Pack 10.2.0 Basic”和ffmpeg。这些视频与我的视频播放器正常播放。我还尝试将.dll复制到工作目录,在system32目录中搜索opencv dll并在此计算机上使用mingw重建OpenCV。我知道很多人都有同样的问题,但他们的建议都没有解决。有谁知道如何解决这个问题?

非常感谢!

纳丁

----更新----我仍然无法打开视频文件,所以我在Windows7 64位系统上编写了应用程序。它工作正常,但当我尝试在Windows8计算机上打开应用程序时,它仍然无法打开该文件。安装哪个编解码器并不重要,因为它通常在每台Windows7计算机上运行,​​并且在每台Windows8计算机上都会失败。对于较旧的OpenCV版本也是如此。 OpenCV和Windows8是否存在普遍问题?

2 个答案:

答案 0 :(得分: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自己的演示程序使用。

答案 1 :(得分:0)

我不知道是否有人仍然需要答案,但这是我如何解决这个问题。

我只是将opencv_ffmpegXXX.dll复制到包含.exe文件的目录中。我花了好几天才找到它。感谢您的所有答案和帮助!