VideoCapture 类


  • public class VideoCapture
    extends java.lang.Object
    用于从视频文件、图像序列或摄像头捕获视频的类。此类提供 C++ API,用于从摄像头捕获视频或读取视频文件和图像序列。以下是此类的使用方法:INCLUDE: samples/cpp/videocapture_basic.cpp 注意:在 REF: 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) 展示 Video4Linux2 后端某些功能的 %VideoCapture 示例 OPENCV_SOURCE_CODE/samples/python/video_v4l2.py
    • 字段摘要

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

      构造函数 
      修饰符 构造函数 描述
        VideoCapture()
      默认构造函数 注意:在 REF: 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, ...) 的额外参数。
      protected 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()
        默认构造函数 注意:在 REF: 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 作为后端,则为 gst-launch 工具格式中的 GStreamer 管道字符串。请注意,每个视频流或 IP 摄像机馈送都有其自己的 URL 方案。请参考源流的文档以了解正确的 URL。
        apiPreference - 首选的 Capture 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 作为后端,则为 gst-launch 工具格式中的 GStreamer 管道字符串。请注意,每个视频流或 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 - 首选的 Capture 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)
      • open

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

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

        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 关闭已打开的文件或摄像头。
      • open

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

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

        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 关闭已打开的文件或摄像头。
      • open

        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() 来解码并从每个摄像头获取帧。这样可以消除去马赛克或 Motion 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 后端 -> 操作系统 -> 设备驱动程序 -> 设备硬件 返回的值可能与设备实际使用的值不同,或者可以使用设备相关的规则(例如,步长或百分比)进行编码。有效行为取决于设备驱动程序和 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
        重写
        java.lang.Object 中的 finalize
        抛出
        java.lang.Throwable