基于OpenCV和imageio实现将视频转为GIF
在这个文章中,我们将学习如何从基于OpenCV和imageio实现将视频转为GIF。
1.步骤
- 使用
cv2.VideoCapture
打开视频文件 - 使用
cap.read()
方法一帧一帧读取视频帧 - 将BGR转为RGB。
imageio
接受RGB格式的图像 - 将帧保存到列表中,并关闭视频文件
- 使用
imageio.mimsave()
方法将帧列表转换为GIF。根据需要设置FPS
代码如下:
import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []while True:ret, frame = cap.read()frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)
接下来让我们看看如何定制化视频部分转为GIF。
2. 定制化视频部分转为GIF
2.1 方法一
使用视频的FPS,我们可以很容易的计算出开始与结束帧。然后提取之间的所有帧。一旦需要的帧提取完,我们就可以将它们转为GIF。以下显示了提取20秒到25秒之间的帧并将其转为GIF。
import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
fps = cap.get(cv2.CAP_PROP_FPS)
start_time = 20*fps
end_time = 25*fps
image_lst = []
i = 0while True:ret, frame = cap.read()if ret == False:breakif (i>=start_time and i<=end_time):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('q'):breaki +=1cap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)
2.2 方法二
也可以根据控件手动的保存需要的帧图像。例如,当按s
时候保存图像到列表中,当按q
时候退出。
import cv2import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []prev_key = -1
while True:ret, frame = cap.read()cv2.imshow('a', frame)key = cv2.waitKey(1)if key == ord('s'):key = -1prev_key = ord('s')if key == -1 and prev_key == ord('s'):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)
2.2 方法三
这种方法相对来说比较繁琐。在这里,你一帧一帧地浏览每一帧,如果你想包括在GIF中你按下a
键。要退出,按q
键。一旦特定的帧被提取出来,我们可以很容易地使用imageio
将它们转换成上面讨论过的动图。下面是它的代码。
import cv2
import imageiocap = cv2.VideoCapture('D:/downloads/video.mp4')
image_lst = []while True:ret, frame = cap.read()cv2.imshow('a', frame)key = cv2.waitKey(0)if key == ord('s'):frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)image_lst.append(frame_rgb)if key == ord('q'):breakcap.release()
cv2.destroyAllWindows()# Convert to gif using the imageio.mimsave method
imageio.mimsave('D:/downloads/video.gif', image_lst, fps=60)
参考目录
https://theailearner.com/2021/05/29/creating-gif-from-video-using-opencv-and-imageio/
基于OpenCV和imageio实现将视频转为GIF相关推荐
- 基于opencv在摄像头ubuntu根据视频获取
基于opencv在摄像头ubuntu根据视频获取 1 工具 原料 平台 :UBUNTU12.04 安装库 Opencv-2.3 2 安装编译执行步骤 安装编译opencv-2.3 參考h ...
- 基于opencv的绿幕背景视频抠图算法流程
- 基于OpenCV实现对图片及视频中感兴趣区域颜色识别
- python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...
- python视频人脸检测_Python基于OpenCV实现视频的人脸检测
本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...
- 基于OpenCV的视频处理管道
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目前可依靠模块化方式实现图像处理管道,检测一堆图像文件中的人脸,并 ...
- Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]
1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...
- 基于OpenCV的视频场景切割神器
环境 windows 10 64bit anaconda with python 3.7 pyscenedetect 0.5.5 简介 了解视频剪辑的小伙伴,应该都知道转场这个词.一个视频场景转换到另 ...
- 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)
基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...
最新文章
- opencv图像遍历方法速度对比
- 常考数据结构与算法:求平方根
- Android JNI 和 NDK
- 一个曾经的愤青梦--弥衡
- python实战1.1——根据1.0做词云图
- 在Ant Design Pro(React)中使用ECharts
- Linux_ubuntu16.04 无线/Wifi 上网速度慢的解决方法
- 测试显卡用什么软件最好,显卡测试用什么软件 怎么测试显卡性能
- postgres 坐标_用postgreSQL做基于地理位置的app(zz)
- springboot+毕业设计管理系统 毕业设计-附源码221032
- 可以打开c语言的软件图标是个虫子,VC雕虫小技集(四) (转)
- 社会人文跨计算机考研,各位跨专业考研党,不要违反这个规则,不然结果会让人遗憾...
- 使用Matlab把图片集合生成视频流文件
- 8B / 10B Encode/Decode详解
- codecombat计算机科学入门四(python)
- 如何判断当前浏览器是IE11
- Github博客+腾讯云域名的快捷绑定方案
- 基于halcon的焊点定位实例
- 单相PWM逆变器的建模-非常基础的建模文章 讲的也很细致
- 计算机视觉领域经典论文源码大全
热门文章
- 配置阿里云maven镜像
- easyrecovery15版本专业数据恢复软件
- 学生课程系统(java版)
- ppt流程图字体太小_PPT基础不好?这5个高大上的PPT技巧,瞬间让老板刮目相看!...
- C语言的变量类型(int、short、char、float...)及变量类型转换详解
- 使用java来写一个游戏外挂-内存修改程序(辅助-开篇)
- Thinkphp子查询问题总结
- 上一封邮件下一封邮件返回邮件 新技能Get!如何破解安卓手机图案解锁
- 爆炸好用!异常行为检测 GitHub 神器来了!
- 走进嵌入式Linux的世界