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 longnativeObj
-
构造函数摘要
构造函数 修饰符 构造函数 描述 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, ...)的额外参数。protectedVideoCapture(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()
默认构造函数 注意:在 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
-
-