【问题标题】:Unable to read video in opencv无法在opencv中读取视频
【发布时间】:2018-02-27 17:48:20
【问题描述】:

我正在尝试读取视频文件,但出现错误。 代码是:

#include <iostream>
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
    Mat inputVideo;
    Mat frame;
    Mat HSV;
    Mat tracking;
    char checkKey;
    VideoCapture capture;
    capture.open("video/input.mp4");
    capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
    capture.set(CV_CAP_PROP_FRAME_HEIGHT,480);      
    namedWindow("Original Video", WINDOW_AUTOSIZE );
    while(1){
        capture.read(inputVideo);
        if (!inputVideo.empty())
        {
            imshow("Original Video",inputVideo);

        }
        waitKey(20);

    }
    return 0;
 }

在运行此代码时,我得到的错误是:

无法停止流:设备的 ioctl 不合适

(video_reading:3459): GLib-GObject-CRITICAL **: g_object_set: 断言“G_IS_OBJECT(对象)”失败

我试图寻找解决方案,但我没有得到它。谁能帮我解决这个错误。

【问题讨论】:

  • 可能是ffmpeg错误。尝试使用 cmake 再次构建它
  • @Ran 你用 Gstreamer 构建了opencv 吗?
  • 我不知道什么是 gstreamer。我使用以下命令构建了opencv cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES= ON -D WITH_QT=ON -D WITH_OPENGL=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D PYTHON_EXECUTABLE=/usr/bin/python3 -D WITH_CUDA=ON -D WITH_FFMPEG=ON -D ENABLE_FAST_MATH=1 - D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 ..

标签: c++ opencv


【解决方案1】:

我对您的代码做了一些小改动。试试这个:

#include <iostream>
#include <opencv/highgui.h>
#include <opencv/cv.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
    Mat inputVideo;
    Mat frame;
    Mat HSV;
    Mat tracking;
    char checkKey;
    VideoCapture capture;
    capture.open("video/input.mp4");
    capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
    capture.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
    namedWindow("Original Video", WINDOW_AUTOSIZE);
    while (1) {
        capture >> inputVideo;
        if (inputVideo.empty())
            break;
        imshow("Original Video", inputVideo);
        waitKey(1);
    }
    capture.release();
    return 0;
}

【讨论】:

  • 我认为这并不能解决问题,它可能仍然会给你同样的错误
  • @jazz 是的,正如 Anirudh 所说,我遇到了与上述相同的错误。
  • 好的。然后你必须再次用 cmake 构建它。对于我的系统,它有效。
猜你喜欢
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
  • 2013-02-06
  • 2013-04-28
  • 2016-05-16
相关资源
最近更新 更多