Python+OpenCV教程3:打开摄像头

学习打开摄像头捕获照片、播放本地视频、录制视频等。

目标:

打开摄像头并捕获照片
播放本地视频,录制视频
OpenCV函数:cv2.VideoCapture(), cv2.VideoWriter()

教程

打开摄像头
要使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象,参数:0指的是摄像头的编号。如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1。

打开摄像头并灰度化显示

import cv2capture = cv2.VideoCapture(0)while(True):# 获取一帧ret, frame = capture.read()# 将这帧转换为灰度图gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('frame', gray)if cv2.waitKey(1) == ord('q'):break

capture.read()函数返回的第1个参数ret(return value缩写)是一个布尔值,表示当前这一帧是否获取正确。cv2.cvtColor()用来转换颜色,这里将彩色图转成灰度图。
另外,通过cap.get(propId)可以获取摄像头的一些属性,比如捕获的分辨率,亮度和对比度等。propId是从0~18的数字,代表不同的属性,完整的属性列表可以参考:Property Identifier。也可以使用cap.set(propId,value)来修改属性值。比如说,我们在while之前添加下面的代码:

# 获取捕获的分辨率
# propId可以直接写数字,也可以用OpenCV的符号表示
width, height = capture.get(3), capture.get(4)
print(width, height)# 以原分辨率的一倍来捕获
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)

经验之谈:某些摄像头设定分辨率等参数时会无效,因为它有固定的分辨率大小支持,一般可在摄像头的资料页中找到

播放本地视频
跟打开摄像头一样,如果把摄像头的编号换成视频的路径就可以播放本地视频了。回想一下cv2.waitKey(),它的参数表示暂停时间,所以这个值越大,视频播放速度越慢,反之,播放速度越快,通常设置为25或30。

# 播放本地视频
跟打开摄像头一样,如果把摄像头的编号换成视频的路径就可以播放本地视频了。回想一下cv2.waitKey(),它的参数表示暂停时间,所以这个值越大,视频播放速度越慢,反之,播放速度越快,通常设置为25或30。

capture = cv2.VideoCapture('demo_video.mp4')while(capture.isOpened()):ret, frame = capture.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('frame', gray)if cv2.waitKey(30) == ord('q'):break

录制视频
之前我们保存图片用的是cv2.imwrite(),要保存视频,我们需要创建一个VideoWriter的对象,需要给它传入四个参数:
O 输出的文件名,如output.avi
O 编码方式FourCC码
O 帧率FPS
O 要保存的分辨率大小

FourCC是用来指定视频编码方式的四字节码,所有的编码可参考Video Codecs。如MJPG编码可以这样写:cv2.VideoWriter_fourcc(*'MJPG')

 cv2.VideoWriter_fourcc('M','J','P','G')capture = cv2.VideoCapture(0)

# 定义编码方式并创建VideoWriter对象

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))while(capture.isOpened()):ret, frame = capture.read()if ret:outfile.write(frame)  # 写入文件cv2.imshow('frame', frame)if cv2.waitKey(1) == ord('q'):breakelse:break

使用OPENCV打开视频,并且录取视频。

import cv2
import datetime cap = cv2.VideoCapture(0)#打开相机#更改文件名字为当前时间
video_old_name = datetime.datetime.now()
video_name = str(video_old_name).replace(':', '-')
video_name = video_name.split('.')[0]
video_new_name = video_name + '.' + 'avi'print('保存视频文件名为:', video_new_name)
print("提示:请按q键结束视频保存")#创建VideoWriter类对象
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
out = cv2.VideoWriter(video_new_name,fourcc, 30.0, (640,480)) #default=20.0while(True):ret,frame = cap.read()#捕获一帧图像out.write(frame)#保存帧cv2.imshow('frame',frame)#显示帧#判断按键,如果按键为q,退出循环if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()#关闭相机
out.release()
cv2.destroyAllWindows()#关闭窗口

小结

使用cv2.VideoCapture()创建视频对象,然后在循环中一帧帧显示图像。参数传入数字时,代表打开摄像头,传入本地视频路径时,表示播放本地视频
cap.get(propId)获取视频属性,cap.set(propId,value)设置视频属性
cv2.VideoWriter()创建视频写入对象,用来录制/保存视频

练习

请尝试先阅读番外篇:滑动条,然后实现一个可以拖动滑块播放视频的功能。(提示:需要用到cv2.CAP_PROP_FRAME_COUNTcv2.CAP_PROP_POS_FRAMES两个属性)

特别感谢前辈:https://www.jianshu.com/p/2b79012c0228

Python+OpenCV教程3:打开摄像头相关推荐

  1. 用gcc生成静态库和动态库和使用opencv库编写打开摄像头压缩视频

    文章目录 一.用gcc生成静态库和动态库 1.编辑生成程序hello.h.hello.c.main.c 2.将hello.c生成.o文件 3.使用静态库 4.动态库的使用 二.a与.so库文件的生成与 ...

  2. Python+OpenCV+pyQt5录制双目摄像头视频

    #Python+OpenCV+pyQt5录制双目摄像头视频 ##起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写 ...

  3. Opencv(C++)笔记--打开摄像头、保存摄像头视频

    1--打开摄像头 关键代码语句: ① VideoCapture cam(0); ② cam.read(img); ③ imshow("cam", img); # include&l ...

  4. Ubuntu下解决OpenCV不能重复打开摄像头拍照问题

    在ubuntu下使用opencv重复调用摄像头后出现错误HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by Op ...

  5. Python——OpenCV(opencv-python库)调用摄像头

    基本概念 OpenCV: OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 ...

  6. python opencv 教程_OpenCV-Python系列教程介绍

    写在前面的话 OpenCV是计算机视觉中经典的专用库,其支持多语言.跨平台,功能强大. OpenCV-Python为OpenCV提供了Python接口,使得使用者在Python中能够调用C/C ,在保 ...

  7. Python:opencv库实现调用摄像头拍照并保存到本地

    导入 opencv-python库,复制代码即可运行 import cv2def picture_shoot(image_name='img.png', image_path=r'E:/') -> ...

  8. Python+OpenCV教程5:颜色空间转换 追踪视频中特定颜色的物体 消除票据中的红色印章

    目标 颜色空间转换,如BGR↔Gray,BGR↔HSV等 追踪视频中特定颜色的物体 OpenCV函数:cv2.cvtColor(),cv2.inRange() 消除票据中的红色印章 教程 颜色空间转换 ...

  9. python opencv教程pdf_机器学习 使用OpenCV和Python进行智能图像处理.pdf

    作 者 :(美)迈克尔·贝耶勒著 出版发行 : 北京:机械工业出版社 , 2019.01 ISBN号 :7-111-61151-6 页 数 : 252 丛书名 : 智能系统与技术丛书 原书定价 : 6 ...

最新文章

  1. 9.Spring Security添加记住我功能
  2. SHELL基础学习必杀技之十三问
  3. (转)PHP EOF(heredoc)的使用方法
  4. [转载]ArcMap中如何自制符号库(二)
  5. 通过HttpListener实现简单的Http服务
  6. P6563-[SBCOI2020]一直在你身旁【dp,单调队列】
  7. ROS(3)订阅者subscriber编程实现
  8. dataframe填充到指定的行数
  9. 利用ant脚本 自动构建svn增量/全量 系统程序升级包
  10. R语言自然语言处理:文本分类
  11. Windows 8家长控制
  12. javascript定时器的计时事件
  13. 武田呈报mobocertinib的最新结果,进一步证实EGFR外显子20插入+ mNSCLC患者的临床收益
  14. Android 字符串求值工具(科学计算)
  15. 《图像处理、分析与机器视觉》(第4版)阅读笔记——第五章 图像预处理
  16. iOS提交应用至App Store流程
  17. 浅谈“决策引擎”在身份管理的应用
  18. STM32cubeHAL ADC+TIM+DMA (二)
  19. 笔记本电脑加一个机械硬盘后的配置工作
  20. 【odoo15】由于目标计算机积极拒绝,无法连接。

热门文章

  1. padstack editor制作过孔
  2. 一个好玩的小游戏——麻神之战
  3. 裁员1700人,IBM 声称内部调整团队;谷歌将以26亿美元全现金收购Looker,绝对大手笔...
  4. 修改contour的线条颜色
  5. 2203-python基础知识
  6. 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】
  7. 因果倒置的实验名称是“延迟实验”(Wheeler's delayed choice experiment)
  8. Spring Boot 快速入门(二)主配置文件、yml配置文件语法
  9. File.createTempFile创建临时文件
  10. CVPR2019|最新更新论文~持续更新|CVPR2019百度云下载