• opencv VideoCapture使用示例


    在centos7下验证VideoCapture功能。

    1 opencv处理视频时要使用ffmpeg,这里使用添加源的方式安装,分为3步

    1.1 先安装EPEL Release,使用其他的repo源,所以需要EPEL支持
    yum install -y epel-release 
    #如果出现缺少Code提示,可以:
    sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    #安装完成之后,可以查看是否安装成功
    yum repolist 

    1.2 安装Nux-Dextop源

    #导入一个Code
    sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro 
    #安装nux-dextop 源
    sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
    #查看repo源是否安装成功
    yum repolist 

    1.3 yum安装ffmpeg
    yum install -y ffmpeg
    yum install -y ffmpeg-dev

    2 还要安装gtk库

    yum install gtk+-devel gtk2-devel

    3 此时可以编译opevcv源码,在源码根目录下建立一个build目录,进入build目录执行

    cmake ..

    make

    make install

    到此处安装完成

    4 验证程序

    摄像头

        #include <opencv2/opencv.hpp>  
        #include <iostream>  
          
        int main()  
        {  
            cv::VideoCapture capture;  
            capture.open(0);//open 根据编号打开摄像头
            std::cout<<"-------------"<<std::endl;
            if (!capture.isOpened())  
            {  
                std::cout << "Read video Failed !" << std::endl;  
                return 0;  
            }  
          
            cv::Mat frame;  
            cv::namedWindow("video test");  
          
            int frame_num = 800;
          
            for (int i = 0; i < frame_num - 1; ++i)  
            {  
                capture >> frame;  
                //capture.read(frame);
                imshow("video test", frame);  
                if (cv::waitKey(30) == 'q')  
                {  
                    break;  
                }  
            }  
          
            cv::destroyWindow("video test");  
            capture.release();  
            return 0;  
        } 

     本地文件

        #include <opencv2/opencv.hpp>  
        #include <iostream>  
          
        int main()  
        {  
            cv::VideoCapture capture;  
            capture.open("test.mp4");
            std::cout<<"-------------"<<std::endl;
            if (!capture.isOpened())  
            {  
                std::cout << "Read video Failed !" << std::endl;  
                return 0;  
            }  
          
            cv::Mat frame;  
            cv::namedWindow("video test");  
          
            capture.get(cv::CAP_PROP_FRAME_COUNT);  
            std::cout << "total frame number is: " << frame_num << std::endl;  
          
            for (int i = 0; i < frame_num - 1; ++i)  
            {  
                capture >> frame;  
                //capture.read(frame);
                imshow("video test", frame);  
                if (cv::waitKey(30) == 'q')  
                {  
                    break;  
                }  
            }  
          
            cv::destroyWindow("video test");  
            capture.release();  
            return 0;  
        }  

    5 说明

    运行时出现

    Unable to stop the stream: Inappropriate ioctl for device

     是因为没有安装ffmpeg-dev导致。

    不能播放时确认是否安装yum install gtk+-devel gtk2-devel

  • 相关阅读:
    iOS NSString的常用用法
    有序数组在数据量较少时候的查找效率比较
    【转载】gdb基本命令总结
    从一个笔误引起的思考
    常见性能优化小技巧原理
    使用T-SQL进行活动目录查询
    你需要一条怎样的牛仔裤?
    #VSTS日志# 2015/12/10 – 终于可以删除工作项了
    #VSTS定制#全新的模版定制能力
    混合使用TFVC和GIT配置库的优化方案
  • 原文地址:https://www.cnblogs.com/mingzhang/p/7460465.html
Copyright © 2020-2023  润新知