用于从视频文件、图像序列或摄像头捕获视频的类。更多...
#include <opencv2/videoio.hpp>
|
| | VideoCapture () |
| | 默认构造函数。
|
| |
| | VideoCapture (const Ptr< IStreamReader > &source, int apiPreference, const std::vector< int > ¶ms) |
| | 使用数据流打开视频。
|
| |
| | VideoCapture (const String &filename, int apiPreference, const std::vector< int > ¶ms) |
| | 以API偏好和参数打开视频文件、捕获设备或IP视频流进行视频捕获。
|
| |
| | VideoCapture (const String &filename, int apiPreference=CAP_ANY) |
| | 以API偏好打开视频文件、捕获设备或IP视频流进行视频捕获。
|
| |
| | VideoCapture (int index, int apiPreference, const std::vector< int > ¶ms) |
| | 以API偏好和参数打开摄像头进行视频捕获。
|
| |
| | VideoCapture (int index, int apiPreference=CAP_ANY) |
| | 打开摄像头进行视频捕获。
|
| |
| virtual | ~VideoCapture () |
| | 默认析构函数。
|
| |
| virtual double | get (int propId) const |
| | 返回指定的 VideoCapture 属性。
|
| |
| String | getBackendName () const |
| | 返回使用的后端API名称。
|
| |
| bool | getExceptionMode () const |
| | 查询异常模式是否激活
|
| |
| virtual bool | grab () |
| | 从视频文件或捕获设备捕获下一帧。
|
| |
| virtual bool | isOpened () const |
| | 如果视频捕获已初始化,则返回 true。
|
| |
| virtual bool | open (const Ptr< IStreamReader > &source, int apiPreference, const std::vector< int > ¶ms) |
| | 使用数据流打开视频。
|
| |
| virtual bool | open (const String &filename, int apiPreference, const std::vector< int > ¶ms) |
| | 以API偏好和参数打开视频文件、捕获设备或IP视频流进行视频捕获。
|
| |
| virtual bool | open (const String &filename, int apiPreference=CAP_ANY) |
| | 打开视频文件、捕获设备或IP视频流进行视频捕获。
|
| |
| virtual bool | open (int index, int apiPreference, const std::vector< int > ¶ms) |
| | 以API偏好和参数打开摄像头进行视频捕获。
|
| |
| virtual bool | open (int index, int apiPreference=CAP_ANY) |
| | 打开摄像头进行视频捕获。
|
| |
| virtual VideoCapture & | operator>> (Mat &image) |
| | 用于读取下一视频帧的流操作符。
|
| |
| virtual VideoCapture & | operator>> (UMat &image) |
| |
| virtual bool | OutputArray image) |
| | 抓取、解码并返回下一个视频帧。
|
| |
| virtual void | release () |
| | 关闭视频文件或捕获设备。
|
| |
| virtual bool | retrieve (OutputArray image, int flag=0) |
| | 解码并返回捕获的视频帧。
|
| |
| virtual bool | set (int propId, double value) |
| | 设置 VideoCapture 中的属性。
|
| |
| void | setExceptionMode (bool enable) |
| |
用于从视频文件、图像序列或摄像头捕获视频的类。
该类提供了C++ API,用于从摄像头捕获视频或读取视频文件和图像序列。
以下是该类的使用方法
#include <iostream>
#include <stdio.h>
{
int deviceID = 0;
cap.
open(deviceID, apiID);
cerr << "错误!无法打开摄像头\n";
return -1;
}
cout << "开始捕获" << endl
<< "按任意键终止" << endl;
for (;;)
{
cerr << "错误!捕获到空白帧\n";
break;
}
imshow("Live", frame);
if (waitKey(5) >= 0)
break;
}
return 0;
}
cv::getTickFrequency
double getTickFrequency()
用于从视频文件、图像序列或摄像头捕获视频的类。
Definition videoio.hpp:772
virtual bool read(OutputArray image)
抓取、解码并返回下一个视频帧。
virtual bool open(const String &filename, int apiPreference=CAP_ANY)
打开视频文件、捕获设备或IP视频流进行视频捕获。
virtual bool isOpened() const
如果视频捕获已初始化,则返回 true。
@ CAP_ANY
自动检测 == 0。
定义 videoio.hpp:96
int main(int argc, char *argv[])
定义 highgui_qt.cpp:3
- 注意
- 在 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 中找到
- 示例
- samples/cpp/camshiftdemo.cpp, samples/cpp/facedetect.cpp, samples/cpp/laplace.cpp, samples/cpp/lkdemo.cpp, samples/cpp/peopledetect.cpp, samples/cpp/polar_transforms.cpp, samples/cpp/segment_objects.cpp, samples/cpp/train_HOG.cpp, samples/cpp/tutorial_code/videoio/video-write/video-write.cpp, samples/cpp/videowriter_basic.cpp, samples/dnn/classification.cpp, samples/dnn/object_detection.cpp, samples/dnn/segmentation.cpp, samples/dnn/text_detection.cpp, and samples/tapi/hog.cpp。
◆ VideoCapture() [1/6]
| cv::VideoCapture::VideoCapture |
( |
| ) |
|
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
默认构造函数。
- 注意
- 在 C API 中,当你完成视频处理后,使用 cvReleaseCapture() 释放 CvCapture 结构,或使用 Ptr<CvCapture>,它会在析构函数中自动调用 cvReleaseCapture()。
◆ VideoCapture() [2/6]
| cv::VideoCapture::VideoCapture |
( |
const String & | filename, |
|
|
int | apiPreference = CAP_ANY ) |
|
显式 |
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
以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() [3/6]
| cv::VideoCapture::VideoCapture |
( |
const String & | filename, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
显式 |
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
以API偏好和参数打开视频文件、捕获设备或IP视频流进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
params 参数允许指定额外参数,这些参数以对的形式编码:(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)。详见 cv::VideoCaptureProperties
◆ VideoCapture() [4/6]
| cv::VideoCapture::VideoCapture |
( |
int | index, |
|
|
int | apiPreference = CAP_ANY ) |
|
显式 |
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
打开摄像头进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
- 参数
-
| 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() [5/6]
| cv::VideoCapture::VideoCapture |
( |
int | index, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
显式 |
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
以API偏好和参数打开摄像头进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
params 参数允许指定额外参数,这些参数以对的形式编码:(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)。详见 cv::VideoCaptureProperties
◆ VideoCapture() [6/6]
| cv::VideoCapture::VideoCapture |
( |
const Ptr< IStreamReader > & | source, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
| Python |
|---|
| cv.VideoCapture( | | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | filename, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index[, apiPreference] | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | index, apiPreference, params | ) -> | <VideoCapture 对象> |
| cv.VideoCapture( | source, apiPreference, params | ) -> | <VideoCapture 对象> |
使用数据流打开视频。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
params 参数允许指定额外参数,这些参数以对的形式编码:(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)。详见 cv::VideoCaptureProperties
◆ ~VideoCapture()
| virtual cv::VideoCapture::~VideoCapture |
( |
| ) |
|
|
virtual |
◆ get()
| virtual double cv::VideoCapture::get |
( |
int | propId | ) |
const |
|
virtual |
| Python |
|---|
| cv.VideoCapture.get( | propId | ) -> | retval |
◆ getBackendName()
| String cv::VideoCapture::getBackendName |
( |
| ) |
const |
| Python |
|---|
| cv.VideoCapture.getBackendName( | | ) -> | retval |
◆ getExceptionMode()
| bool cv::VideoCapture::getExceptionMode |
( |
| ) |
const |
|
inline |
| Python |
|---|
| cv.VideoCapture.getExceptionMode( | | ) -> | retval |
◆ grab()
| virtual bool cv::VideoCapture::grab |
( |
| ) |
|
|
virtual |
| Python |
|---|
| cv.VideoCapture.grab( | | ) -> | retval |
◆ isOpened()
| virtual bool cv::VideoCapture::isOpened |
( |
| ) |
const |
|
virtual |
| Python |
|---|
| cv.VideoCapture.isOpened( | | ) -> | retval |
◆ open() [1/5]
| virtual bool cv::VideoCapture::open |
( |
const Ptr< IStreamReader > & | source, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | retval |
◆ open() [2/5]
| virtual bool cv::VideoCapture::open |
( |
const String & | filename, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | retval |
以API偏好和参数打开视频文件、捕获设备或IP视频流进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
params 参数允许指定额外参数,这些参数以对的形式编码:(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)。详见 cv::VideoCaptureProperties
- 返回
- 如果文件成功打开则为
true
该方法首先调用 VideoCapture::release 以关闭已打开的文件或摄像头。
◆ open() [3/5]
| virtual bool cv::VideoCapture::open |
( |
const String & | filename, |
|
|
int | apiPreference = CAP_ANY ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | retval |
打开视频文件、捕获设备或IP视频流进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
参数与构造函数 VideoCapture(const String& filename, int apiPreference = CAP_ANY) 相同。
- 返回
- 如果文件成功打开则为
true
该方法首先调用 VideoCapture::release 以关闭已打开的文件或摄像头。
- 示例
- samples/cpp/camshiftdemo.cpp, samples/cpp/facedetect.cpp, samples/cpp/laplace.cpp, samples/cpp/lkdemo.cpp, samples/cpp/peopledetect.cpp, samples/cpp/polar_transforms.cpp, samples/cpp/segment_objects.cpp, samples/cpp/train_HOG.cpp, samples/dnn/classification.cpp, samples/dnn/object_detection.cpp, samples/dnn/segmentation.cpp, samples/dnn/text_detection.cpp, and samples/tapi/hog.cpp。
◆ open() [4/5]
| virtual bool cv::VideoCapture::open |
( |
int | index, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | retval |
以API偏好和参数打开摄像头进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
params 参数允许指定额外参数,这些参数以对的形式编码:(paramId_1, paramValue_1, paramId_2, paramValue_2, ...)。详见 cv::VideoCaptureProperties
- 返回
- 如果摄像头成功打开则为
true。
该方法首先调用 VideoCapture::release 以关闭已打开的文件或摄像头。
◆ open() [5/5]
| virtual bool cv::VideoCapture::open |
( |
int | index, |
|
|
int | apiPreference = CAP_ANY ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | retval |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | retval |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | retval |
打开摄像头进行视频捕获。
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
参数与构造函数 VideoCapture(int index, int apiPreference = CAP_ANY) 相同。
- 返回
- 如果摄像头成功打开则为
true。
该方法首先调用 VideoCapture::release 以关闭已打开的文件或摄像头。
◆ operator>>() [1/2]
◆ operator>>() [2/2]
这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于其接受的参数。
- 另请参见
- read()
◆ read()
| virtual bool cv::VideoCapture::read |
( |
OutputArray | image | ) |
|
|
virtual |
| Python |
|---|
| cv.VideoCapture.read( | [, image] | ) -> | 返回值, image |
◆ release()
| virtual void cv::VideoCapture::release |
( |
| ) |
|
|
virtual |
| Python |
|---|
| cv.VideoCapture.release( | | ) -> | 无 |
◆ retrieve()
| virtual bool cv::VideoCapture::retrieve |
( |
OutputArray | image, |
|
|
int | flag = 0 ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.retrieve( | [, image[, flag]] | ) -> | 返回值, image |
解码并返回捕获的视频帧。
- 参数
-
| [输出] | image | 视频帧在此处返回。如果没有抓取到帧,则图像将为空。 |
| flag | 它可以是帧索引或驱动程序特定标志 |
- 返回
- 如果没有抓取到帧则为
false
该方法解码并返回刚抓取的帧。如果没有抓取到帧(摄像头已断开连接,或视频文件中没有更多帧),该方法返回 false,并且函数返回空图像(对于 cv::Mat,可使用 Mat::empty() 进行测试)。
- 另请参见
- read()
- 注意
- 在 C API 中,函数 cvRetrieveFrame() 和 cv.RetrieveFrame() 返回存储在视频捕获结构中的图像。不允许修改或释放该图像!您可以使用 cvCloneImage 复制帧,然后对副本进行任何操作。
◆ set()
| virtual bool cv::VideoCapture::set |
( |
int | propId, |
|
|
double | 值 ) |
|
virtual |
| Python |
|---|
| cv.VideoCapture.set( | propId, value | ) -> | retval |
◆ setExceptionMode()
| void cv::VideoCapture::setExceptionMode |
( |
bool | 启用 | ) |
|
|
inline |
| Python |
|---|
| cv.VideoCapture.setExceptionMode( | 启用 | ) -> | 无 |
切换异常模式
如果不成功,方法会抛出异常而不是返回错误代码
◆ waitAny()
| static bool cv::VideoCapture::waitAny |
( |
const std::vector< VideoCapture > & | streams, |
|
|
std::vector< int > & | readyIndex, |
|
|
int64 | timeoutNs = 0 ) |
|
static |
| Python |
|---|
| cv.VideoCapture.waitAny( | streams[, timeoutNs] | ) -> | retval, readyIndex |
| cv.VideoCapture_waitAny( | streams[, timeoutNs] | ) -> | retval, readyIndex |
◆ internal::VideoCapturePrivateAccessor
| friend class internal::VideoCapturePrivateAccessor |
|
friend |
◆ cap
◆ icap
| Ptr<IVideoCapture> cv::VideoCapture::icap |
|
保护 |
◆ throwOnFail
| bool cv::VideoCapture::throwOnFail |
|
保护 |
本类的文档生成自以下文件