用于从视频文件、图像序列或摄像头捕获视频的类。 更多…
#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 | read (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("实时画面", frame);
if (waitKey(5) >= 0)
break;
}
return 0;
}
bool empty() const
如果数组没有元素,则返回true。
用于从视频文件、图像序列或摄像头捕获视频的类。
定义 videoio.hpp:766
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, 和 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 ) |
|
explicit |
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作为后端,则为gst-launch工具格式中的GStreamer管道字符串。 请注意,每个视频流或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 ) |
|
explicit |
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 ) |
|
explicit |
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 ) |
|
explicit |
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 > & | 数据源, |
|
|
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 |
( |
| ) |
|
|
虚函数 |
◆ get()
virtual double cv::VideoCapture::get |
( |
int | 属性ID | ) |
const |
|
虚函数 |
Python |
---|
| cv.VideoCapture.get( | 属性ID | ) -> | 返回值 |
返回指定的 VideoCapture 属性。
- 参数
-
- 返回
- 指定属性的值。当查询VideoCapture实例使用的后端不支持的属性时,返回的值为0。
- 注意
- 读取/写入属性涉及许多层。在这个过程中可能会发生一些意想不到的结果。返回值可能与设备实际使用的值不同,或者它可能使用设备相关的规则(例如,步长或百分比)进行编码。实际行为取决于设备驱动程序和API后端。
- 示例
- samples/cpp/laplace.cpp.
◆ getBackendName()
String cv::VideoCapture::getBackendName |
( |
| ) |
const |
Python |
---|
| cv.VideoCapture.getBackendName( | | ) -> | 返回值 |
返回使用的后端 API 名称。
- 注意
- 流应该已经打开。
◆ getExceptionMode()
bool cv::VideoCapture::getExceptionMode |
( |
| ) |
const |
|
内联函数 |
Python |
---|
| cv.VideoCapture.getExceptionMode( | | ) -> | 返回值 |
◆ grab()
virtual bool cv::VideoCapture::grab |
( |
| ) |
|
|
虚函数 |
Python |
---|
| cv.VideoCapture.grab( | | ) -> | 返回值 |
◆ isOpened()
virtual bool cv::VideoCapture::isOpened |
( |
| ) |
const |
|
虚函数 |
Python |
---|
| cv.VideoCapture.isOpened( | | ) -> | 返回值 |
◆ open() [1/5]
virtual bool cv::VideoCapture::open |
( |
const Ptr< IStreamReader > & | 数据源, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | 返回值 |
◆ open() [2/5]
virtual bool cv::VideoCapture::open |
( |
const String & | filename, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | 返回值 |
使用 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 ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | 返回值 |
◆ open() [4/5]
virtual bool cv::VideoCapture::open |
( |
int | index, |
|
|
int | apiPreference, |
|
|
const std::vector< int > & | params ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | 返回值 |
使用 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 ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.open( | filename[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | filename, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | index[, apiPreference] | ) -> | 返回值 |
| cv.VideoCapture.open( | index, apiPreference, params | ) -> | 返回值 |
| cv.VideoCapture.open( | source, apiPreference, params | ) -> | 返回值 |
打开摄像头进行视频捕获。
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅仅在于它接受的参数。
参数与构造函数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 | ) |
|
|
虚函数 |
Python |
---|
| cv.VideoCapture.read( | [, image] | ) -> | retval, image |
◆ release()
virtual void cv::VideoCapture::release |
( |
| ) |
|
|
虚函数 |
Python |
---|
| cv.VideoCapture.release( | | ) -> | 无 |
◆ retrieve()
virtual bool cv::VideoCapture::retrieve |
( |
OutputArray | image, |
|
|
int | flag = 0 ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.retrieve( | [, image[, flag]] | ) -> | retval, image |
解码并返回已抓取的视频帧。
- 参数
-
[out] | image | 视频帧将返回此处。如果未抓取任何帧,则图像将为空。 |
| flag | 它可以是帧索引或驱动程序特定的标志 |
- 返回
- 如果未抓取任何帧,则返回
false
此方法解码并返回刚刚抓取的帧。如果未抓取任何帧(摄像头已断开连接,或者视频文件中没有更多帧),则该方法返回false,函数返回空图像(使用cv::Mat,用Mat::empty()测试)。
- 另请参见
- read()
- 注意
- 在C API中,函数cvRetrieveFrame()和cv.RetrieveFrame()返回存储在视频捕获结构中的图像。不允许修改或释放图像!可以使用cvCloneImage复制帧,然后对副本执行任何操作。
◆ set()
virtual bool cv::VideoCapture::set |
( |
int | 属性ID, |
|
|
double | value ) |
|
虚函数 |
Python |
---|
| cv.VideoCapture.set( | propId, value | ) -> | 返回值 |
◆ setExceptionMode()
void cv::VideoCapture::setExceptionMode |
( |
bool | enable | ) |
|
|
内联函数 |
Python |
---|
| cv.VideoCapture.setExceptionMode( | enable | ) -> | 无 |
切换异常模式
如果方法不成功,则引发异常,而不是返回错误代码。
◆ 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 |
|
protected |
◆ throwOnFail
bool cv::VideoCapture::throwOnFail |
|
protected |
此类的文档是从以下文件生成的: