zoukankan      html  css  js  c++  java
  • 使用opencv显示视频的方法

      下面对使用opencv显示视频做一个简单的记录。当然,网上这方面的资料已经数不胜数了,我只是将其简单记录,总结一下。

      在opencv中显示视频主要有:

        (1)从本地读取视频和调用摄像头读取视频

        (2)使用C接口和使用C++接口

      一、使用opencv显示本地视频

        1、使用opencv的C++接口显示本地视频 

    /*
     *使用opencv的C++接口显示本地视频
     */
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/imgproc/imgproc.hpp>  
    #include <opencv2/core/core.hpp>
    
    using namespace cv;
       
    int main( int argc, char** argv )  
    {  
    
        VideoCapture cap("test.mp4");  
        if(!cap.isOpened())  
        {  
            return -1;  
        }  
        Mat frame;   
        while(1)  
        {  
            cap>>frame;  
            if(frame.empty()) break;
            imshow("当前视频",frame);  
            if(waitKey(30) >=0)  
                break;
        }  
        return 0;
    }
    

        

        2、使用opencv的C接口显示视频的test code

    /*
     *使用opencv的C接口显示本地视频
     */
    #include "highgui.h"
    #include "cxcore.h"
    #include "cv.h"
    void main()
    {
        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
        CvCapture* capture = cvCreateFileCapture("test.mp4");
        IplImage* frame;
        while(1) {
            frame = cvQueryFrame( capture );
            if( !frame ) break;
            cvShowImage( "Example2", frame );
            char c = cvWaitKey(33);
            if( c == 27 ) break;
        }
        cvReleaseCapture( &capture );
        cvDestroyWindow( "Example2" );
    }

      二、使用opencv调用摄像头

        1、使用opencv的C++接口调用摄像头

    /*
     *使用opencv的C++接口调用摄像头
     */
    
    
    #include <opencv2/highgui/highgui.hpp>  
    #include <opencv2/imgproc/imgproc.hpp>  
    #include <opencv2/core/core.hpp>
    
    using namespace cv;
       
    int main( int argc, char** argv )  
    {  
    
        VideoCapture cap(0);  
        if(!cap.isOpened())  
        {  
            return -1;  
        }  
        Mat frame;   
        while(1)  
        {  
            cap>>frame;  
            if(frame.empty()) break;
            imshow("当前视频",frame);  
            if(waitKey(30) >=0)  
                break;
        }  
        return 0;
    }

        2、使用opencv的C接口调用摄像头

    /*
     *使用opencv的C接口调用摄像头
     */
    
    
    #include "highgui.h"
    #include "cxcore.h"
    #include "cv.h"
    void main()
    {
        cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
        CvCapture* capture = cvCreateCameraCapture(0);
        IplImage* frame;
        while(1) {
            frame = cvQueryFrame( capture );
            if( !frame ) break;
            cvShowImage( "Example2", frame );
            char c = cvWaitKey(33);
            if( c == 27 ) break;
        }
        cvReleaseCapture( &capture );
        cvDestroyWindow( "Example2" );
    }

      三、总结

        1、使用C接口和使用C++接口需要包含不同的头文件

        2、C++接口用于保存视频信息的是VideoCapture,该数据接口提供两种构造函数VideoCapture(string &filename)和VideoCapture(int cameraNum)。以字符串为参数的构造函数用于显示本地视频,参数为视频路径。而以整型变量为参数的构造函数用于调用摄像头,参数代表调用的是第几个摄像头。

        3、C接口用于保存视频信息的是CvCapture结构体,并且通过函数cvCreateFileCapture(char * filename)来读取本地视频和通过cvCreateCameraCapture(int cameraNum)来调用摄像头。

        4、opencv中C和C++读取视频帧的方法也同相同,C通过cvQueryFrame函数来读取视频的下一帧并保存到IplImage结构体中,而C++接口直接通过">>"将视频的一帧读取出并保存到Mat结构体中。

    ——来自 熊猫 [http://www.cnblogs.com/xiongmao-cpp/]
  • 相关阅读:
    HDU 5105 Math Problem(BestCoder Round #18)
    HDU 5101 Select(BestCoder Round #17)
    HDU 5100 Chessboard(BestCoder Round #17)(找规律)
    HDU 5087 Revenge of LIS II(BestCoder Round #16)(次长上升子序列)
    HDU 5067 Harry And Dig Machine(BestCoder Round #14)
    HDU 5063 Operation the Sequence(BestCoder Round #13)
    2015ACM/ICPC亚洲区长春站-重现赛 1006 Almost Sorted Array
    2015ACM/ICPC亚洲区沈阳站-重现赛 1004 Pagodas
    Loadrunner 问题总结
    如何解决LodRunner中报错关于Error -10489
  • 原文地址:https://www.cnblogs.com/xiongmao-cpp/p/4800034.html
Copyright © 2011-2022 走看看