1.6 opencv视频操作基础
利用opencv中的VideoCapture类,来对视频进行读取显示,以及调用摄像头。
VideoCapture是opencv 2.X中新增的一个类,对应于之前C语言版本的CvCapture结构体。它提供了从摄像机或视频文件捕获视频的C++接口,作用是从视频文件或从摄像头捕获视频并显示出来。
1、读取并播放视频
通过对VideoCapture类的分析,可以发现利用它读入视频的方法一般有如下两种:
1)先实例化再初始化
VideoCapture capture;
capture.open("1.avi");//1.avi为工程路径下的视频文件
2)在实例化的同时进行初始化
VideoCapture capture("1.avi");
视频读入到VideoCapture类对象之后,紧接着可以用一个循环将每一帧都显示出来,相关代码如下:
//循环显示每一帧 while(1) { Mat frame;//定义一个Mat变量,用于存储每一帧的图像 capture>>frame;//读取当前帧 imshow("读取视频",frame);//显示当前帧 waitkey(30);//延时30ms }
上面代码中,首先定义一个Mat变量,用于存储每一帧的图像,接着读取当前帧到Mat变量中,然后调用imshow显示当前的这一帧图像,并用waitkey延时30毫秒,开始下一次循环。
视频载入示例程序
#include<opencv2/opencv.hpp> using namespace cv;//包含cv命名空间 int main() { //1读图视频 VideoCapture capture("1.avi"); //2循环显示每一帧 while (1) { Mat frame;//定义一个Mat变量,用于存储每一帧的图像 capture >> frame;//读取当前帧 imshow("读取视频",frame);//显示当前帧 waitKey(30);//延时30ms } return (0); }
2、调用摄像头采集图像
要调用摄像头进行视频采集的话,将代码VideoCapture capture("1.avi")中的"1.avi"换为0即可;表示调用摄像头而不是从文件中读取。对应于上文讲到的两种写法,即有
1)先实例化再初始化
VideoCapture capture;
capture.open(0);
2)在实例化的同时进行初始化
VideoCapture capture(0);
代码:

#include<opencv2/opencv.hpp> using namespace cv;//包含cv命名空间 int main() { //1从摄像头读入视频 VideoCapture capture(0); //2循环显示每一帧 while (1) { Mat frame;//定义一个Mat变量,用于存储每一帧的图像 capture >> frame;//读取当前帧 imshow("读取视频",frame);//显示当前帧 waitKey(30);//延时30ms } return (0); }
下面通过上面的摄像头程序来调用canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频,

#include<opencv2/opencv.hpp> using namespace cv;//包含cv命名空间 int main() { //1从摄像头读入视频 VideoCapture capture(0); Mat edges; //2循环显示每一帧 while (1) { //1读入图像 Mat frame;//定义一个Mat变量,用于存储每一帧的图像 capture >> frame;//读取当前帧 //2将源图像转换为灰度图像 cvtColor(frame,edges,CV_BGR2GRAY);//转化BGR彩色图为灰度图 //3使用3*3内核来降噪(2*3+1=7) blur(edges,edges,Size(7,7));//进行模糊 //4进行canny边缘检测并显示 Canny(edges,edges,0,30,3); imshow("被canny后的视频",edges);//显示经过处理后的当前帧 if(waitKey(30)>=0) break;//延时30ms } return (0); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】