网站首页 > 技术文章 正文
图像文件可以根据其后缀名知道图像文件的数据结构,但是视频文件后缀名不能说明其数据结构。视频文件能否正常打开,关键是你是否有编码器的解码器
所谓编码器就是指视频文件的压缩算法
所谓解码器就是视频文件的解压缩算法
1、读视频--VideoCapture
视频来源包括两种:(1)读取视频文件;(2)打开摄像头读取实时视频数据。
案例:
读取视频,并每30s读取一帧,对该帧进行边缘检测
int test8() {
//打开摄像头
//VideoCapture cap(0);
//读取视频
VideoCapture cap("C:\\Users\\86188\\Desktop\\swa.mp4");
//检查是否打开成功
if (!cap.isOpened())
{
cerr << "Can not open a camera or file" << endl;
return -1;
}
Mat result;
Mat frame;
//创建一个用于显示的窗口
namedWindow("result",1);
for (;;)
{
//将视频每一帧保存到frame
cap >> frame;
if (frame.empty())
break;
//将得到的图像转化成灰度图
cvtColor(frame, result, COLOR_RGB2GRAY);//COLOR_BGR2GRAY
//显示原图
imshow("原图",frame);
//提取边缘
Canny(result,result,85,150,3);
//显示
imshow("result",result);
if (waitKey(30) >= 0)
break;
}
//退出时会自动释放 cap 中占用资源
return 0;
}
效果如下:
2、写视频--VideoWriter::write()函数
关键是要设置一些参数,包括:文件名,编解码器,帧率,宽度,高度。
三种编解码器的选择(不同OPencv版本函数略有不同)
CV_FOURCC('M','J','P','G')、CV_FOURCC('X','V','I','D')、CV_FOURCC('D','I','V','X')
写视频其实就是将一幅图像写成一个视频文件,所以视频的像素大小必须跟写入图像一样
案例,
int test9() {
Size s(300, 600);//定义视频的宽度和高度
//创建writer,并指定FOURCC及FPS等参数
VideoWriter writer = VideoWriter("C:\\Users\\86188\\Desktop\\myVideo.avi",
VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, s);//opencv4中CV_FOURCC改成fourcc
//检查是否创建成功
if (!writer.isOpened())
{
cerr << "Can not create video file.\n" << endl;
return -1;
}
//视频帧
Mat frame(s, CV_8UC3);//定义三通道图像
for (int i = 0; i < 100; i++)
{
//将图像置为黑色
frame = Scalar::all(0);
//将整数 i 转为 i 字符串类型
char text[128];
snprintf(text, sizeof(text), "%d", i);
//将数字绘到画面上
putText(frame, text, Point(s.width / 3, s.height / 3),
FONT_HERSHEY_SCRIPT_SIMPLEX, 3,
Scalar(0, 0, 255), 3, 8);
//将图像写入视频
writer << frame;
}
//退出程序时会自动关闭视频文件
//上面视频写完了。我们再读取一下,并展示一下效果
VideoCapture myVdieo ("C:\\Users\\86188\\Desktop\\myVideo.avi");
namedWindow("myVideo", 1);
Mat temp;
for (;;)
{
myVdieo >> temp;
if (temp.empty())
break;
imshow("myVideo", temp);
}
//突出程序时候会自动关闭视频文件。或者使用下面进行释放
//myVdieo.release();
return 0;
}
- 上一篇: OpenCV-Python 读取显示图像 | 五
- 下一篇: 构建自动车牌识别系统 车牌自动识别技术
猜你喜欢
- 2024-09-30 OPENCV-python 第一天 python opencv教程
- 2024-09-30 Python帮您十步搞定人脸检测 人脸检测 python
- 2024-09-30 OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG
- 2024-09-30 Ubuntu18.04LTS下OpenCV的配置 ubuntu opencv4
- 2024-09-30 计算机视觉之Opencv(1)——基本操作
- 2024-09-30 OpenCV系列教程_03 opencv官方教程
- 2024-09-30 CV之 HOG特征描述算子-行人检测 卜算子 黄州定慧院寓居作
- 2024-09-30 OpenCV SURF特征点检测和匹配 opencv特征提取方法
- 2024-09-30 Opencv从零开始 - [启蒙篇] - 读取、几何变换
- 2024-09-30 密码忘记了?没事,我早就用Python给你监听了
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)