类 VideoCapture


  • public class VideoCapture
    extends java.lang.Object
    用于从视频文件、图像序列或摄像头捕获视频的类。该类提供了用于从摄像头捕获视频或读取视频文件和图像序列的 C++ API。以下是该类的使用示例:INCLUDE: samples/cpp/videocapture_basic.cpp 注意: 在 参考: videoio_c "C API" 中,使用黑盒结构 CvCapture 而不是 VideoCapture。注意:
    • (C++) 使用 VideoCapture 接口的基本示例可在 OPENCV_SOURCE_CODE/samples/cpp/videocapture_starter.cpp 找到
    • (Python) 使用 VideoCapture 接口的基本示例可在 OPENCV_SOURCE_CODE/samples/python/video.py 找到
    • (Python) 多线程视频处理示例可在 OPENCV_SOURCE_CODE/samples/python/video_threaded.py 找到
    • (Python) VideoCapture 示例,展示了 Video4Linux2 后端的一些特性 OPENCV_SOURCE_CODE/samples/python/video_v4l2.py
    • 字段摘要

      字段 
      修饰符和类型 字段 描述
      protected long nativeObj  
    • 构造函数摘要

      构造函数 
      修饰符 构造函数 描述
        VideoCapture()
      默认构造函数 注意: 在 参考: videoio_c "C API" 中,当您完成视频处理后,使用 cvReleaseCapture() 释放 CvCapture 结构,或者使用 Ptr<CvCapture>,它会在析构函数中自动调用 cvReleaseCapture()。
        VideoCapture​(int index)
      打开一个摄像头用于视频捕获
        VideoCapture​(int index, int apiPreference)
      打开一个摄像头用于视频捕获
        VideoCapture​(int index, int apiPreference, MatOfInt params)
      使用 API 偏好和参数打开一个摄像头用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。
      保护 VideoCapture​(long addr)  
        VideoCapture​(java.lang.String filename)
      使用 API 偏好打开一个视频文件、捕获设备或 IP 视频流用于视频捕获
        VideoCapture​(java.lang.String filename, int apiPreference)
      使用 API 偏好打开一个视频文件、捕获设备或 IP 视频流用于视频捕获
        VideoCapture​(java.lang.String filename, int apiPreference, MatOfInt params)
      使用 API 偏好和参数打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。
        VideoCapture​(IStreamReader source, int apiPreference, MatOfInt params)
      使用数据流打开视频。
    • 方法摘要

      所有方法 静态方法 实例方法 具体方法 
      修饰符和类型 方法 描述
      static VideoCapture __fromPtr__​(long addr)  
      protected void finalize()  
      double get​(int propId)
      返回指定的VideoCapture属性
      java.lang.String getBackendName()
      返回所使用的后端 API 名称 注意: 流应该已打开。
      boolean getExceptionMode()  
      long getNativeObjAddr()  
      boolean grab()
      从视频文件或捕获设备捕获下一帧。
      boolean isOpened()
      如果视频捕获已初始化,则返回 true。
      boolean open​(int index)
      打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同
      boolean open​(int index, int apiPreference)
      打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同
      boolean open​(int index, int apiPreference, MatOfInt params)
      使用 API 偏好和参数打开一个摄像头用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。
      boolean open​(java.lang.String filename)
      打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。
      boolean open​(java.lang.String filename, int apiPreference)
      打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。
      boolean open​(java.lang.String filename, int apiPreference, MatOfInt params)
      使用 API 偏好和参数打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。
      boolean open​(IStreamReader source, int apiPreference, MatOfInt params)
      使用数据流打开视频。
      boolean read​(Mat image)
      抓取、解码并返回下一个视频帧。
      void release()
      关闭视频文件或捕获设备。
      boolean retrieve​(Mat image)
      解码并返回捕获的视频帧。
      boolean retrieve​(Mat image, int flag)
      解码并返回捕获的视频帧。
      boolean set​(int propId, double value)
      设置 VideoCapture 中的属性。
      void setExceptionMode​(boolean enable)
      切换异常模式:如果方法不成功,则抛出异常而不是返回错误代码
      • 从类继承的方法 java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 字段详细信息

      • nativeObj

        protected final long nativeObj
    • 构造函数详细信息

      • VideoCapture

        protected VideoCapture​(long addr)
      • VideoCapture

        public VideoCapture()
        默认构造函数 注意: 在 参考: videoio_c "C API" 中,当您完成视频处理后,使用 cvReleaseCapture() 释放 CvCapture 结构,或者使用 Ptr<CvCapture>,它会在析构函数中自动调用 cvReleaseCapture()。
      • VideoCapture

        public VideoCapture​(java.lang.String filename,
                            int apiPreference)
        使用 API 偏好打开一个视频文件、捕获设备或 IP 视频流用于视频捕获
        参数
        filename - 它可以是
        • 视频文件名(例如 video.avi
        • 或图像序列(例如 img_%02d.jpg,它将读取 img_00.jpg, img_01.jpg, img_02.jpg, ... 这样的样本)
        • 或视频流的 URL(例如 protocol://host:port/script_name?script_params|auth
        • 或 GStreamer 管道字符串,如果 GStreamer 用作后端,则采用 gst-launch 工具格式。请注意,每个视频流或 IP 摄像头源都有其自己的 URL 方案。请参考源流的文档以了解正确的 URL。
        apiPreference - 首选的捕获 API 后端。当有多个可用时,可用于强制使用特定的读取器实现:例如 cv::CAP_FFMPEG 或 cv::CAP_IMAGES 或 cv::CAP_DSHOW。参见: cv::VideoCaptureAPIs
      • VideoCapture

        public VideoCapture​(java.lang.String filename)
        使用 API 偏好打开一个视频文件、捕获设备或 IP 视频流用于视频捕获
        参数
        filename - 它可以是
        • 视频文件名(例如 video.avi
        • 或图像序列(例如 img_%02d.jpg,它将读取 img_00.jpg, img_01.jpg, img_02.jpg, ... 这样的样本)
        • 或视频流的 URL(例如 protocol://host:port/script_name?script_params|auth
        • 或 GStreamer 管道字符串,如果 GStreamer 用作后端,则采用 gst-launch 工具格式。请注意,每个视频流或 IP 摄像头源都有其自己的 URL 方案。请参考源流的文档以了解正确的 URL。
        实现,如果存在多个可用:例如 cv::CAP_FFMPEG 或 cv::CAP_IMAGES 或 cv::CAP_DSHOW。参见: cv::VideoCaptureAPIs
      • VideoCapture

        public VideoCapture​(java.lang.String filename,
                            int apiPreference,
                            MatOfInt params)
        使用 API 偏好和参数打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        filename - 自动生成
        apiPreference - 自动生成
        params - 自动生成
      • VideoCapture

        public VideoCapture​(int index,
                            int apiPreference)
        打开一个摄像头用于视频捕获
        参数
        index - 要打开的视频捕获设备的 ID。要使用默认后端打开默认摄像头,只需传入 0。(为了向后兼容,当 apiPreference 为 CAP_ANY 时,使用 camera_id + domain_offset (CAP_*) 是有效的)
        apiPreference - 首选的捕获 API 后端。当有多个可用时,可用于强制使用特定的读取器实现:例如 cv::CAP_DSHOW 或 cv::CAP_MSMF 或 cv::CAP_V4L。参见: cv::VideoCaptureAPIs
      • VideoCapture

        public VideoCapture​(int index)
        打开一个摄像头用于视频捕获
        参数
        index - 要打开的视频捕获设备的 ID。要使用默认后端打开默认摄像头,只需传入 0。(为了向后兼容,当 apiPreference 为 CAP_ANY 时,使用 camera_id + domain_offset (CAP_*) 是有效的)实现,如果存在多个可用:例如 cv::CAP_DSHOW 或 cv::CAP_MSMF 或 cv::CAP_V4L。参见: cv::VideoCaptureAPIs
      • VideoCapture

        public VideoCapture​(int index,
                            int apiPreference,
                            MatOfInt params)
        使用 API 偏好和参数打开一个摄像头用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        index - 自动生成
        apiPreference - 自动生成
        params - 自动生成
      • VideoCapture

        public VideoCapture​(IStreamReader source,
                            int apiPreference,
                            MatOfInt params)
        使用数据流打开视频。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        source - 自动生成
        apiPreference - 自动生成
        params - 自动生成
    • 方法详细信息

      • getNativeObjAddr

        public long getNativeObjAddr()
      • __fromPtr__

        public static VideoCapture __fromPtr__​(long addr)
      • 打开

        public boolean open​(java.lang.String filename,
                            int apiPreference)
        打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。参数与构造函数 VideoCapture(const String& filename, int apiPreference = CAP_ANY) 相同
        参数
        filename - 自动生成
        apiPreference - 自动生成
        返回
        如果文件已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(java.lang.String filename)
        打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。参数与构造函数 VideoCapture(const String& filename, int apiPreference = CAP_ANY) 相同
        参数
        filename - 自动生成
        返回
        如果文件已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(java.lang.String filename,
                            int apiPreference,
                            MatOfInt params)
        使用 API 偏好和参数打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        filename - 自动生成
        apiPreference - 自动生成
        params - 自动生成
        返回
        如果文件已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(int index,
                            int apiPreference)
        打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同
        参数
        index - 自动生成
        apiPreference - 自动生成
        返回
        如果摄像头已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(int index)
        打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同
        参数
        index - 自动生成
        返回
        如果摄像头已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(int index,
                            int apiPreference,
                            MatOfInt params)
        使用 API 偏好和参数打开一个摄像头用于视频捕获。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        index - 自动生成
        apiPreference - 自动生成
        params - 自动生成
        返回
        如果摄像头已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • 打开

        public boolean open​(IStreamReader source,
                            int apiPreference,
                            MatOfInt params)
        使用数据流打开视频。params 参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。参见 cv::VideoCaptureProperties
        参数
        source - 自动生成
        apiPreference - 自动生成
        params - 自动生成
        返回
        如果文件已成功打开,则为 true。该方法首先调用 VideoCapture::release 来关闭已打开的文件或摄像头。
      • isOpened

        public boolean isOpened()
        如果视频捕获已初始化,则返回 true。如果之前对 VideoCapture 构造函数或 VideoCapture::open() 的调用成功,则该方法返回 true。
        返回
        自动生成
      • release

        public void release()
        关闭视频文件或捕获设备。该方法由后续的 VideoCapture::open 和 VideoCapture 析构函数自动调用。C 函数还会释放内存并清除 \*capture 指针。
      • grab

        public boolean grab()
        从视频文件或捕获设备捕获下一帧。
        返回
        成功时返回 true(非零)。该方法/函数从视频文件或摄像头抓取下一帧,并在成功时返回 true(非零)。此函数的主要用途是在多摄像头环境中,特别是当摄像头没有硬件同步时。也就是说,您为每个摄像头调用 VideoCapture::grab(),然后调用较慢的 VideoCapture::retrieve() 方法来解码并从每个摄像头获取帧。这样可以消除去马赛克或运动 JPEG 解压缩等开销,并且从不同摄像头检索到的帧在时间上会更接近。此外,当连接的摄像头是多头(例如,立体摄像头或 Kinect 设备)时,从中检索数据的正确方法是先调用 VideoCapture::grab(),然后使用不同的通道参数值多次调用 VideoCapture::retrieve()。参考: tutorial_kinect_openni
      • retrieve

        public boolean retrieve​(Mat image,
                                int flag)
        解码并返回捕获的视频帧。
        参数
        flag - 它可以是帧索引或驱动程序特定标志
        image - 自动生成
        返回
        如果没有抓取到帧,则为 false。该方法解码并返回刚刚抓取的帧。如果没有抓取到帧(摄像头已断开连接,或视频文件中没有更多帧),该方法返回 false,函数返回一个空图像(使用 %cv::Mat,通过 Mat::empty() 进行测试)。参见: read() 注意: 在 参考: videoio_c "C API" 中,函数 cvRetrieveFrame() 和 cv.RetrieveFrame() 返回存储在视频捕获结构中的图像。不允许修改或释放该图像!您可以使用 cvCloneImage 复制帧,然后对副本进行任何操作。
      • retrieve

        public boolean retrieve​(Mat image)
        解码并返回捕获的视频帧。
        参数
        image - 自动生成
        返回
        如果没有抓取到帧,则为 false。该方法解码并返回刚刚抓取的帧。如果没有抓取到帧(摄像头已断开连接,或视频文件中没有更多帧),该方法返回 false,函数返回一个空图像(使用 %cv::Mat,通过 Mat::empty() 进行测试)。参见: read() 注意: 在 参考: videoio_c "C API" 中,函数 cvRetrieveFrame() 和 cv.RetrieveFrame() 返回存储在视频捕获结构中的图像。不允许修改或释放该图像!您可以使用 cvCloneImage 复制帧,然后对副本进行任何操作。
      • read

        public boolean read​(Mat image)
        抓取、解码并返回下一个视频帧。
        参数
        image - 自动生成
        返回
        如果没有抓取到帧,则为 false。该方法/函数将 VideoCapture::grab() 和 VideoCapture::retrieve() 合并为一个调用。这是读取视频文件或从解码捕获数据并返回刚刚抓取的帧最便捷的方法。如果没有抓取到帧(摄像头已断开连接,或视频文件中没有更多帧),该方法返回 false,函数返回一个空图像(使用 %cv::Mat,通过 Mat::empty() 进行测试)。注意: 在 参考: videoio_c "C API" 中,函数 cvRetrieveFrame() 和 cv.RetrieveFrame() 返回存储在视频捕获结构中的图像。不允许修改或释放该图像!您可以使用 cvCloneImage 复制帧,然后对副本进行任何操作。
      • set

        public boolean set​(int propId,
                           double value)
        设置 VideoCapture 中的属性。
        参数
        propId - 来自 cv::VideoCaptureProperties 的属性标识符(例如 cv::CAP_PROP_POS_MSEC, cv::CAP_PROP_POS_FRAMES, ...)或来自 参考: videoio_flags_others 的标识符
        value - 属性的值。
        返回
        如果 VideoCapture 实例使用的后端支持该属性,则为 true注意: 即使返回 true,这也不能保证捕获设备已接受该属性值。参见 VideoCapture::get() 中的注释
      • get

        public double get​(int propId)
        返回指定的VideoCapture属性
        参数
        propId - 来自 cv::VideoCaptureProperties 的属性标识符(例如 cv::CAP_PROP_POS_MSEC, cv::CAP_PROP_POS_FRAMES, ...)或来自 参考: videoio_flags_others 的标识符
        返回
        指定属性的值。当查询 VideoCapture 实例使用的后端不支持的属性时,返回值为 0。注意: 读取/写入属性涉及多个层次。沿着这个链条可能会发生一些意外结果。 VideoCapture -> API Backend -> Operating System -> Device Driver -> Device Hardware 返回值可能与设备实际使用的值不同,或者可能使用设备相关的规则(例如步长或百分比)进行编码。实际行为取决于设备驱动程序和 API 后端
      • getBackendName

        public java.lang.String getBackendName()
        返回所使用的后端 API 名称 注意: 流应该已打开。
        返回
        自动生成
      • setExceptionMode

        public void setExceptionMode​(boolean enable)
        切换异常模式:如果方法不成功,则抛出异常而不是返回错误代码
        参数
        enable - 自动生成
      • getExceptionMode

        public boolean getExceptionMode()
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        重写
        finalize 在类 java.lang.Object
        抛出
        java.lang.Throwable