【问题标题】:VideoCapture will not open the videoVideoCapture 不会打开视频
【发布时间】:2020-01-15 12:14:15
【问题描述】:

我正在尝试打开视频并将其写入某个位置:

#include <opencv2/opencv.hpp>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "iostream"

using namespace cv;
using namespace std;

int main()
{
    string videoName = "KorExp3.avi";
    VideoCapture video(videoName);

    Mat frame;

    video >> frame;

    VideoWriter w("D:/w.avi", CV_FOURCC('M', 'P', '4', '2'), 30, frame.size(), true);
    while (true) {
        video >> frame;
        imshow("frame", frame);
        w << frame;
    }
    w.release();

    waitKey(0);
    return 0;
}

在调试模式下,将鼠标悬停在video 上会显示:

信息不可用,没有为 opencv_world340d.dll 加载符号

我已将此 dll 文件和视频文件复制到 .exe 的同一位置,但仍然发生相同的情况。我还尝试了视频string videoName = "D:\\KorExp3.avi";的绝对路径,但没有成功。

如何使用 openCV 捕获视频并将其写入某个位置?

【问题讨论】:

    标签: c++ opencv video-capture


    【解决方案1】:

    您是否生成(编译)带有调试符号的 OpenCV? 这是使用 OpenCV 录制视频文件的示例(和简单)代码... 我在 Linux 上使用 Qt(5.5.1 及更高版本),但这没关系...... 它适用于所有操作系统...

    void MainWindow::on_Rec_Click()
    {
            QString szNome = QString("%1/%2-%3-M.mp4").arg(szPath).arg(szCamIndex).arg(obAgora.toString("yyyyMMddHHmmss"));
            qDebug() << szNome;
    
            char    szCPath[2048];
            strcpy(szCPath, szNome.toStdString().c_str());
            qDebug() << "Path: " << szCPath; 
            MakePath(szCPath, inIndice+1); // If the path does not exist...
            SaveEventToDB(szNome, inIndice+1, obAgora, 0); // Register event in DB
            qDebug() << m_Capture[inIndice - 1] << " / " << inIndice;
            cv::Size S = cv::Size((int) m_Capture[inIndice]->get(CV_CAP_PROP_FRAME_WIDTH),    // Acquire input size
                                  (int) m_Capture[inIndice]->get(CV_CAP_PROP_FRAME_HEIGHT));
    
            qDebug() << S.width << " / " << S.height;
    
            int ex = cv::VideoWriter::fourcc('M','P','4','2');
            qDebug() << ex;
    
            double dlFrameRate = m_Capture[inIndice]->get(CV_CAP_PROP_FPS);
            qDebug() << dlFrameRate;
    
            m_Output = new cv::VideoWriter(szNome.toStdString(), ex, dlFrameRate, S, true);
            qDebug() << "Object cv::VideoWriter created.";
    
            m_OutputFile = szNome;
            m_inTimerID = startTimer(1000 / dlFrameRate);
    }
    
    void MainWindow::timerEvent(QTimerEvent *event)
    {
        if(m_inActualView != 0) {
            cv::Mat image;
            *m_Capture[m_inActualView] >> image;
    
            if(m_Output) {
                if(m_Output->isOpened()) {
                    *m_Output << image;
                }
            }
            cv::flip( image,image, 0);
    
            // Show the image
            m_Ui->openCVViewer->showImage( image );
        }
    }
    

    【讨论】:

      【解决方案2】:

      我把视频的目录,而不是把视频移动到项目位置,错误解决了:

      string videoName = "D:\\KorExp3.avi";
      while (true) {
          video >> frame;
      ...
      

      【讨论】:

        猜你喜欢
        • 2013-01-22
        • 2017-11-12
        • 2018-07-26
        • 2021-03-22
        • 2012-07-13
        • 1970-01-01
        • 2017-09-28
        • 2012-04-30
        • 1970-01-01
        相关资源
        最近更新 更多