【问题标题】:Video files in opencvopencv中的视频文件
【发布时间】:2012-04-13 17:31:44
【问题描述】:

我想读取视频文件(.avi 或 .mov)并使用 Opencv 检测运动和边缘。你能帮我编写代码吗?我想创建一个 GUI,我们可以在其中选择视频文件,然后我们可以携带opencv中的图像处理函数?

【问题讨论】:

  • 兄弟,这并不容易。您仍然需要自己学习基础知识。
  • laganiere.name/opencvCookbook 看看这本书。简单明了,将帮助您开始使用 OpenCV

标签: c++ c opencv video-streaming motion-detection


【解决方案1】:

【讨论】:

  • 你真棒,你有某种计算机视觉常见问题解答数据库吗? :P
【解决方案2】:

这对我有用,我正在使用AVIfiles。 使用文件名调用视频,在您的主循环中获取下一帧并在终止或更改为另一个视频之前关闭。

IplImage  *videoframe;
int videoFps;    
CvCapture *videoCapture=NULL;

int video(char *videoFile) {
    int       key;
    /* load the AVI file */
    videoCapture = cvCaptureFromAVI( videoFile );
    /* always check */
    if( !videoCapture )
        return 0;    
    /* get fps, needed to set the delay */
    videoFps = ( int )cvGetCaptureProperty( videoCapture, CV_CAP_PROP_FPS );
    /* display video */
    cvNamedWindow( "video", 0 );
}

void videoNext() {
        if ( ! videoCapture ) return;
        videoframe = cvQueryFrame( videoCapture );
        if( !videoframe ) return;
        cvShowImage( "video", videoframe );
        /* quit if user press 'q' */
        int key = cvWaitKey( 1000 / videoFps );
}

void videoShutdown() {
    /* free memory */
    cvReleaseCapture( &videoCapture );
    cvDestroyWindow( "video" );
    return;
}

注意:Opencv 不支持音频播放 关于如何将 ffmmpeg 与 opencv 一起使用,请参阅audio-output-with-video-processing-with-opencv

【讨论】:

    【解决方案3】:

    从视频中读取帧的最短示例:

    cap = cv::VideoCapture("foo.avi");
    frame = cv::Mat;
    cap >> frame;
    

    【讨论】:

      【解决方案4】:

      您应该查看 opencv 的 python 文件夹中包含的示例。 它们可以在这里找到:opencv\samples\python2

      在那里你会发现opencv(以cv2格式)的许多基本和高级特性的演示。这里的网站上也有很多教程(主要是c++):http://opencv.itseez.com/doc/tutorials/tutorials.html

      读写视频图片在这里:http://opencv.itseez.com/trunk/modules/highgui/doc/reading_and_writing_images_and_video.html

      对于 AVI 的初始视频捕获:

      import cv2
      import cv2.cv as cv
      import numpy as np
      
      cap = cv2.VideoCapture(filename)
      img = cv2.VideoCapture.read()
      if img:
         print img.get(cv.CV_CAP_PROP_FRAME_HEIGHT)
         print type(img)
      # loop through rest of frames reading one at a time
      

      【讨论】:

      • 您确定该代码吗?根据文档,cv2.VideoCapture.read() 返回一个元组:RetVal, Image。
      猜你喜欢
      • 2014-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2013-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多