opencv图像处理学习(六十九)——VideoCapture类

1.VideoCapture类

  Opencv中提供了专门操作视频的接口类VideoCapture,VideoCapture类可以从文件或摄像头设备中读取视频,提供常用的三种构造方法如下:

VideoCapture::VideoCapture();
VideoCapture::VideoCapture(const string &filename);
VideoCapture::VideoCapture(int device);

  参数filename表示视频文件的路径及名称;device表示打开视频操作索引号设置,如果是摄像头则设置为0。下表列出了VideoCapture中的对应方法及功能:

函数功能
VideoCapture::open打开视频文件或视频获取装置
VideoCapture::isOpened判断视频文件是否正确,返回true则正确
VideoCapture::release关闭视频流文件
VideoCapture::grab抓住下一帧的视频文件或捕获设备
VideoCapture::retrieve解码并返回了视频帧
VideoCapture::read抓住,解码并返回下一个视频帧
VideoCapture::get返回指定视频类的相关参数信息
VideoCapture::set设置类信息的一个属性

  opertor>>方法利用函数重载提取单帧图像image,read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat::clone()方法进行复制操作。

2.参考代码

  如果默认笔记本/台式机只有一个USB摄像头,Index=0; 如果有2个,一般Index为0和1,根据具体情况区分,摄像头接入和断开会改变Index值

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\highgui\highgui.hpp>

void main()
{
	cv::VideoCapture sensor;
	sensor.open(1);
	cv::Mat Image;

	while (1)
	{
		sensor >> Image;
		cv::imshow("video",Image);
		cv::waitKey(30);
	}
}
### 如何使用OpenCV进行摄像头图像处理 #### 准备工作 为了能够顺利地使用OpenCV来处理来自摄像头的图像数据,前期准备工作至关重要。这涉及到编程环境的选择以及必要的软件包安装。 对于Python开发者而言,在开始编写代码前需确认已成功安装Python解释器,并可通过`pip install opencv-python`这条指令完成对OpenCV库的引入[^3]。 #### 获取视频流并显示 一旦完成了上述准备活动,则可着手于构建程序逻辑以实现从设备默认摄像头上抓取实时影像的功能。下面给出了一段简单的Python脚本用于演示这一过程: ```python import cv2 # 打开默认相机(编号0),如果有多个外接摄像头可以根据实际情况调整参数值 cap = cv2.VideoCapture(0) while True: # 逐帧捕获 ret, frame = cap.read() if not ret: print("无法接收帧 (stream end?). Exiting ...") break # 显示结果窗口 cv2.imshow('Camera Preview', frame) # 如果按下 'q' 键则退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break # 清理资源 cap.release() cv2.destroyAllWindows() ``` 此段代码实现了基本的摄像头访问与视频播放功能,其中包含了创建VideoCapture对象、持续读入新帧直至遇到错误或手动终止条件满足为止;期间每获得一帧都会立即呈现给用户查看。 #### 图像转换及保存 除了简单地展示原始采集到的画面之外,还可以进一步对其进行变换操作比如转成灰度图或是应用各种滤镜效果等。这里提供了一个额外的例子用来说明怎样拍摄一张照片并将之存储至本地磁盘中去: ```python import cv2 cap = cv2.VideoCapture(0) ret, frame = cap.read() # 只获取单张图片 if ret: gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转换颜色空间为灰色级别 filename = "captured_image.png" cv2.imwrite(filename, gray_frame) # 将处理后的图像写入文件系统内指定路径处 else: print("未能正确取得图像") cap.release() print(f"图像已被保存为 {filename}") ``` 这段扩展版本不仅限于屏幕上的视觉反馈,还增加了实际的数据持久化步骤——即将经过特定算法加工过的像素阵列导出成为物理介质上的位图文档形式存在下来供后续查阅分析所用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值