一、从相机读取视频

通常情况下,我们必须用摄像机捕捉实时画面。让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来。
        要捕获视频,我们需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。我们可以通过传递1来选择第二个相机,以此类推。在此之后,我们需要通过逐帧捕获将视频保存为画面。但是在最后,不要忘记释放被捕获的俘虏。下面代码就可以实现从相机中读取视频的操作。

import cv2 as cv

cap = cv.VideoCapture(0)
if not cap.isOpened():
print("无法打开相机!")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("未正确读取视频!")
break
# 我们在框架上的操作到这里
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 显示结果帧
cv.imshow('视频', gray)
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()

  cap.read() 返回布尔值( True / False )。如果正确读取了帧,它将为 True 。因此,我们可以通过检查此返回值来检查视频的结尾。

二、从文件播放视频

它与从相机捕获相同,只是用视频文件名更改摄像机索引。另外,请使用适当的时间cv.waitKey() 。如果太小,则视频将非常快,而如果太大,则视频将变得很慢(嗯,这下你也可以用opencv实现视频的慢动作了)。正常情况下我们选择25毫秒就可以了。

import cv2 as cv
cap = cv.VideoCapture('vtest.avi')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("未正确读取视频")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('视频', gray)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()

三、保存视频

所以我们捕捉一个视频,一帧一帧地处理,我们想要保存这个视频。只需使用 cv.imwrite()即可。这次我们创建一个 VideoWriter 对象。我们应该指定输出文件名(例如: output.avi)。然后我们应该指定 FourCC 代码。然后传递帧率的数量和帧大小。最后一个是颜色标志。如果为True ,编码器为颜色帧,否则它与灰度帧一起工作。

FourCC 是用于指定视频编解码器的4字节代码它取决于计算机所在的平台。平时只需要传递‘XVID’就可以。代码片段如下:

import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("无法读取视频!.")
break
frame = cv.flip(frame, 0)
# 写翻转的框架
out.write(frame)
cv.imshow('视频', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()

最新文章

  1. [LeetCode] Reorder List 链表重排序
  2. 轻松搭建Unity3D 安卓Android开发环境
  3. .net MVC 连接数据本地数据库三种方法
  4. TP框架自动加载优先级
  5. 3、面向对象以及winform的简单运用(类的初步认识)
  6. Angularjs过滤器的开发.
  7. 安装Sikulix
  8. switchomega配置
  9. CentOS7/RHEL7安装Redis步骤详解
  10. CSS浏览器兼容性问题集()两
  11. 25个最佳最闪亮的Eclipse开发项目
  12. Vue学习笔记五:事件修饰符
  13. Qt如何去掉按钮等控件的虚线框(焦点框)
  14. zabbix基础服务搭建
  15. window7环境下ZooKeeper的安装运行及监控查看
  16. final 关键字的作用及应用案例
  17. java读取视频文件时长
  18. python模块中sys.argv[]使用
  19. PDF Transformer+与Transformer3.0功能对比
  20. VS 2013 with update 5 编译程序出现A task was cancel

热门文章

  1. Centos8 Tomcat 开机自启配置
  2. Vue学习笔记(二)动态绑定、计算属性和事件监听
  3. 腾讯云分布式数据库TDSQL在银行传统核心系统中的应用实践
  4. HCIA-数据链路层
  5. 大厂需要什么样的 Android 开发?
  6. Linux 内核的代码仓库太不一样了,光克隆都让我挠头,克隆后居然还丢文件,你肯定也会遇到!!!
  7. Microservices==>Service Mesh==>Serverless,走马观花
  8. JVM学习笔记-第三章-垃圾收集器与内存分配策略
  9. 用Ultraedit调试tk程序
  10. U盘自动弹出脚本