当前位置 博文首页 > C++版本_cumtchw:opencv4从avi视频中提取图片/opencv4从摄像头

    C++版本_cumtchw:opencv4从avi视频中提取图片/opencv4从摄像头

    作者:[db:作者] 时间:2021-07-28 15:09

    目录

    1.从视频提取图像

    2.从摄像头提取图像

    3.之前的opencv2老代码


    1.从视频提取图像

    opencv4使用如下代码读取视频数据:

    cv::VideoCapture cap;
    cap.open(video_name);
    
    cv::Mat frame;
    cap >> frame;//读取方式1
    cap.read(frame); //读取方式2
    
    int video_fps = cap.get(CAP_PROP_FPS); //获取帧率
    int width  = cap.get(CAP_PROP_FRAME_WIDTH); 
    int height = cap.get(CAP_PROP_FRAME_HEIGHT); 
    //cv::VideoCapture::get(CAP_PROP_FPS)获取帧率

    另外,makefile中需要链接的库有opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_video opencv_videoio,最开始没有加libopencv_videoio.so,报错undefined reference to `cv::VideoCapture::VideoCapture()',加上opencv_videoio之后就好了,

    2.从摄像头提取图像

    opencv4用下面代码从摄像头抓取图像

    VideoCapture capture(0);//打开摄像头,获取图像。
    while (capture.isOpened())
    {
    	Mat frame;
    	capture >> frame;
    }

    3.之前的opencv2老代码

    ?opencv4不要用以下代码,opencv4中已经没有IplImage这种了,而且cvCaptureFromAVI也会提示没有声明。

    //初始化一个视频文件捕捉器
    CvCapture* capture = cvCaptureFromAVI(filename);
    //获取视频信息
    cvQueryFrame(capture);
    frameH    = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
    frameW    = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
    fps       = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
    numFrames = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
    
    while(1)
    {        
        IplImage *frame  = cvQueryFrame(capture); //获取一帧图片
        if(i >=numFrames || i >= NUM_FRAME ) break;
        //这里判断视频文件是否读完,除了用帧数判断外,也可以直接用下面这行代码判断。
        // if(!frame) break ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
     
    }                                                                                
    
    另外,将imlimage转换为Mat
    Mat::Mat(const IplImage* img, bool copyData=false);

    ?

    ?

    参考文献:

    opencv3 opencv4读取视频并保存为视频以及图片? ??https://blog.csdn.net/mao_hui_fei/article/details/79969020

    【OpenCV3】视频读写——cv::VideoCapture和cv::VideoWriter详解? ??https://blog.csdn.net/guduruyu/article/details/68486063

    OpenCV读取视频、OpenCV提取视频每一帧、每一帧图片合成新的AVI视频??https://www.cnblogs.com/gune/articles/3374651.html

    OPENCV读取AVI视频失败 视频帧提取以及图片合成视频? ??https://www.cnblogs.com/xubenben/archive/2012/12/01/2797689.html

    ?

    cs
    下一篇:没有了