> # ♻️ 资源
> **大小:** 9.71MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010476**](https://www.yuque.com/sxbn/ks/100010476)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87390874**](https://download.csdn.net/download/s1t16/87390874)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 制作个人小视频
# 一、实验内容和要求
基于 OpenCV 生成小视频,制作有浙大元素的图片和个人信息的片头,自己设计情节,其中要缓慢地画一张画面,最后自己设计一个片尾。
做了一个火柴人初见了 OpenCV,尝试了一下,发现非常神奇,大受震撼,最后开心地跑走了的视频。
# 二、实验器材
C++ OpenCV 4.5.0
开发平台:Visual Studio 2019 Debug x64
# 三、具体实现
## 3.1 基本图片与视频的读入
将一些图片和视频作为素材准备好,通过 C++的 fstream 库中定义的 _ finddata_t 结构来获取文件结构,_findfirst 函数来检索指定目录下的文件,并通过文件的扩展名来获取文档,存入 vector 中。
对应的函数如下:
![334d568bcee39f632894fe196bed55c3.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937799201-ab6f9b2b-2824-480b-baf7-66636e4ee248.png#averageHue=%23fdfcfc&clientId=ube0b720a-9000-4&from=paste&height=562&id=u7954a862&originHeight=702&originWidth=1090&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=112572&status=done&style=none&taskId=ufde43d16-b739-4a3f-9a67-b1029c08a2d&title=&width=872)
图片可以通过 OpenCV 的接口读入并按帧写入视频中。写视频采用的是 cv::VideoWriter 类,可以通过流的形式将 Mat(帧)写入视频文件中。
![3ad34119620598d4736d5889826c592f.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937811334-7ed925e7-1c47-4a15-a278-4bb319e3c892.png#averageHue=%23f2f0ea&clientId=ube0b720a-9000-4&from=paste&height=125&id=u5e2f890f&originHeight=156&originWidth=482&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=18616&status=done&style=none&taskId=ub803c06a-cb66-4105-a791-afce21489df&title=&width=385.6)
读取视频采用了 cv::VideoCapture 类,通过流的形式逐帧读入,进行 resize 以后再用 writer 逐帧写入。
![fc456dfc77c0b34c68f190ae4b883a67.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937823484-ca56c0e1-5105-4d7a-9d9e-55bb4f9dc8e5.png#averageHue=%23f0eee8&clientId=ube0b720a-9000-4&from=paste&height=226&id=u1a43fe2d&originHeight=283&originWidth=479&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=24838&status=done&style=none&taskId=u95088498-5dc5-4d93-829c-d90c11312ea&title=&width=383.2)
## 3.2 绘图:绘制 OpenCV logo 和火柴人
逐帧绘制的部分调用了 OpenCV 自带的一些几何体绘制函数,下面以OpenCV 的 logo 绘制为例进行说明。
下面代码是一个红色部分的绘制。调用 ellipse 函数来画椭圆,参数说明如下:
```c
void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
```
ellipse 函数将椭圆画到图像 img 上,椭圆中心为点 center,并且大小位于矩形 axes 内,椭圆旋转角度为 angle, 扩展的弧度从 0 度到 360 度,图形颜色为 Scalar(x, y,z),线宽 (thickness)为 1,线型(lineType)为 8 (8 联通线型)。当线性设为-1 的时候为全填充。
为了达到逐渐绘制的效果,在扩展弧度的部分采用 fps 控制,在帧内逐帧绘制。
![515d40f70c2fd96f6d8ec2b9c64a7b74.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937844287-74696c90-154f-425a-b658-2bc456d1d25b.png#averageHue=%23efede7&clientId=ube0b720a-9000-4&from=paste&height=123&id=u1b266e0d&originHeight=154&originWidth=1088&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=28797&status=done&style=none&taskId=ue383e7b4-be61-41de-a77a-4dbdfd6f8ab&title=&width=870.4)
效果如下:
![0a4d5a3509d0f84a72e7a436992ca654.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937856137-67d9ed21-8533-4425-8fb0-6a837aa7f7a7.png#averageHue=%23140402&clientId=ube0b720a-9000-4&from=paste&height=640&id=ua018963d&originHeight=800&originWidth=1052&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=43300&status=done&style=none&taskId=uba8dfada-9699-42a8-a058-976052244f2&title=&width=841.6)
另一个简笔画是火柴人,效果如下:
![125a714be166b1cdc4783b6ef1a53bf4.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937869089-af4a01e4-62ef-4e84-9ab3-5187b705e07d.png#averageHue=%23f7f9f6&clientId=ube0b720a-9000-4&from=paste&height=670&id=ud9f78bef&originHeight=838&originWidth=1029&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=35601&status=done&style=none&taskId=u52cb4671-4ee7-4829-86d7-76b02b9bfbe&title=&width=823.2)
## 3.3 转场效果
编程实现了两种转场效果,一个是从模糊到清晰的过渡,一个是从右到左的进入。
模糊过渡调用 OpenCV 的 GaussianBlur 函数,根据 fps 控制逐帧从边缘到内部进行高斯模糊。
![586d90a4daae64a88fa249139882d95f.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937885003-c7cdf30b-8015-44c2-b423-4a0ecd5048f5.png#averageHue=%23fdfdfc&clientId=ube0b720a-9000-4&from=paste&height=203&id=u4d8aa612&originHeight=254&originWidth=676&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=26470&status=done&style=none&taskId=u96f3fabe-c2da-4f12-b7d2-a09ecea8c84&title=&width=540.8)
效果如下:
![5f5f46acf62305f0d7b9ea12641fca7a.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937910046-8d9d604c-32b2-427a-abbc-afc0d04efa0a.png#averageHue=%23fafdfa&clientId=ube0b720a-9000-4&from=paste&height=319&id=u7f7300b7&originHeight=399&originWidth=594&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=54066&status=done&style=none&taskId=u09a7abdb-9bde-4410-bf55-f0b092a0961&title=&width=475.2)![b8c4eaf96798350fca6f3eb564dd68f7.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937910057-6de722f4-bb08-4463-ae75-525cb009e9ae.png#averageHue=%23f4fbf9&clientId=ube0b720a-9000-4&from=paste&height=299&id=ud5574456&originHeight=374&originWidth=567&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=36368&status=done&style=none&taskId=ue77b4309-1459-4bea-817d-b4933874121&title=&width=453.6)![da5cf2ee07d78d4d52ebb59520d3f5ec.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937910058-59b45a26-8804-44c2-946c-b8b60f98abdd.png#averageHue=%23eef5f4&clientId=ube0b720a-9000-4&from=paste&height=306&id=u5008c298&originHeight=382&originWidth=574&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=30345&status=done&style=none&taskId=u9a32210d-37df-45d5-92a7-326a0b5aee2&title=&width=459.2)
平移转场效果先设置一张空的图片,然后一列一列地将目标图片的像素复制到空图片的右侧,通过时间控制帧的写入。
![e9f090cfe7d926e43cb933e50bc0d5c1.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937929881-7c8ac7db-758a-4f19-89d4-8b0afb96782c.png#averageHue=%23fdfcfc&clientId=ube0b720a-9000-4&from=paste&height=242&id=uf566ca0d&originHeight=303&originWidth=1013&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=49117&status=done&style=none&taskId=u0609a6e6-687f-40da-ac85-ced79728d68&title=&width=810.4)
效果如下:
![1c4e0af65ef5c5f3ecbcb076a98937bf.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1711937960388-ec8329d
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010476 基于 OpenCV 生成小视频,制作有浙大元素的图片和个人信息的片头,自己设计情节,其中要缓慢地画一张画面,最后自己设计一个片尾。 做了一个火柴人初见了 OpenCV,尝试了一下,发现非常神奇,大受震撼,最后开心地跑走了的视频。
资源推荐
资源详情
资源评论
收起资源包目录
100010476-基于 C++ OpenCV 生成小视频.zip (20个子文件)
personal-small-video
report.pdf 617KB
LICENSE 1KB
可执行文件
Hw.exe 202KB
output.mp4 8.87MB
README.md 11KB
code
Hw
Hw.vcxproj.filters 936B
main.cpp 11KB
Hw.vcxproj 7KB
assets
header
0_1.jpg 87KB
0_0.jpg 81KB
main
3_1.jpg 50KB
1_1.jpg 107KB
2_1.jpg 197KB
0_0.mp4 545KB
3_2.jpg 64KB
4_1.jpg 482KB
4_2.jpg 150KB
1_2.jpg 139KB
0_1.mp4 1.01MB
Hw.sln 1KB
共 20 条
- 1
资源评论
- 远子能核式方程2023-03-20资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- 向日葵xyz2024-05-06内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
神仙别闹
- 粉丝: 3583
- 资源: 7460
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功