类 VideoCapture
- java.lang.Object
-
- org.opencv.videoio.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
- (C++) 使用 VideoCapture 接口的基本示例可在
-
-
字段摘要
字段 修饰符和类型 字段 描述 protected longnativeObj
-
构造函数摘要
构造函数 修饰符 构造函数 描述 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 voidfinalize()doubleget(int propId)返回指定的VideoCapture属性java.lang.StringgetBackendName()返回所使用的后端 API 名称 注意: 流应该已打开。booleangetExceptionMode()longgetNativeObjAddr()booleangrab()从视频文件或捕获设备捕获下一帧。booleanisOpened()如果视频捕获已初始化,则返回 true。booleanopen(int index)打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同booleanopen(int index, int apiPreference)打开一个摄像头用于视频捕获。参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同booleanopen(int index, int apiPreference, MatOfInt params)使用 API 偏好和参数打开一个摄像头用于视频捕获。params参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。booleanopen(java.lang.String filename)打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。booleanopen(java.lang.String filename, int apiPreference)打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。booleanopen(java.lang.String filename, int apiPreference, MatOfInt params)使用 API 偏好和参数打开一个视频文件、捕获设备或 IP 视频流用于视频捕获。params参数允许指定编码为 `(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)` 对的额外参数。booleanopen(IStreamReader source, int apiPreference, MatOfInt params)使用数据流打开视频。booleanread(Mat image)抓取、解码并返回下一个视频帧。voidrelease()关闭视频文件或捕获设备。booleanretrieve(Mat image)解码并返回捕获的视频帧。booleanretrieve(Mat image, int flag)解码并返回捕获的视频帧。booleanset(int propId, double value)设置 VideoCapture 中的属性。voidsetExceptionMode(boolean enable)切换异常模式:如果方法不成功,则抛出异常而不是返回错误代码
-
-
-
构造函数详细信息
-
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。
- 视频文件名(例如
-
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
-
-