读取本地视频&打开摄像头

OpenCV中VideoCapture中有三个构造函数

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • VideoCapture();
  • VideoCapture(const String& filename, int apiPreference = CAP_ANY);
  • VideoCapture(int index, int apiPreference = CAP_ANY);

1.VideoCapture();

默认构造函数

2.VideoCapture(const String& filename, int apiPreference = CAP_ANY);

简单打开一个视频文件 或者一个捕捉设备 或者IP视频流(具体怎么读可以参考https://www.cnblogs.com/arkenstone/p/7194226.html

filename可以是

  • 视频文件名
  • 图片名
  • 视频流的URL

3.VideoCapture(int index, int apiPreference = CAP_ANY);

打开摄像头用来捕捉视频
index默认自带摄像头0,其他的外接摄像头一般是1.

具体定义如下

class CV_EXPORTS_W VideoCapture
{
public:
        CV_WRAP VideoCapture();
        CV_WRAP VideoCapture(const String& filename, int apiPreference = CAP_ANY);
        CV_WRAP VideoCapture(int index, int apiPreference = CAP_ANY);
        virtual ~VideoCapture();
    
    CV_WRAP virtual bool open(const String& filename, int apiPreference = CAP_ANY);

    CV_WRAP virtual bool open(int index, int apiPreference = CAP_ANY);
    
    CV_WRAP virtual bool isOpened() const;
    
    CV_WRAP virtual void release();
    
    CV_WRAP virtual bool grab();
    
    CV_WRAP virtual bool retrieve(OutputArray image, int flag = 0);
    
    virtual VideoCapture& operator >> (CV_OUT Mat& image);

    virtual VideoCapture& operator >> (CV_OUT UMat& image);

    CV_WRAP virtual bool read(OutputArray image);

    CV_WRAP virtual bool set(int propId, double value);

    CV_WRAP virtual double get(int propId) const;

    CV_WRAP String getBackendName() const;

protected:
    Ptr<CvCapture> cap;
    Ptr<IVideoCapture> icap;
}

eg. 读取本地视频

void VideoRead()
{
    VideoCapture capture("1.mp4");
    /*
    VideoCapture capture;
    captrue.open("1.mp4");
    */
        while (1)
    {
        //frame存储每一帧图像
        Mat frame;
        //读取当前帧
        capture >> frame;
        //播放完退出
        if (frame.empty()) {
            printf("播放完成\n");
            break;
        }
        imshow("读取视频",frame);
        //延时30ms
        waitKey(30);
    }
}
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄