VideoCapture 类
- java.lang.Object
-
- org.opencv.videoio.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
- (C++) 使用 %VideoCapture 接口的基本示例可在
-
-
字段摘要
字段 修饰符和类型 字段 描述 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)
切换异常模式,如果方法不成功,则引发异常而不是返回错误代码。
-
-
-
构造函数详情
-
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。
- 视频文件名(例如:
-
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
-
-