墨小澄  
1、用摄像头捕获视频:openCV为摄像头提供了简单的接口,可以捕获一段视屏,并将其转换成灰度视屏显示出来,
创建一个VideoCapture对象,用于获取视频,其参数可以是设备的索引号或者一个视频文件,
设备索引号就是指定要使用的摄像头,一般笔记本默认内置摄像头,参数0.可以通过设成1或其他选择别的摄像头。
之后可以一帧一帧捕获视频,最后不要忘了停止捕获视屏
# 有时cap可能不能成功的而初始化摄像头设备,可以使用cap.isOpened()来检查是否成功初始化,返回True则没问题。否则使用函数cap.open()
# 可以使用函数cap.get(prpId)来获取视频的一些参数信息,这里propId可以是0-18之间的任何整数,每一个数代表视频的一个属性,其中一些值可以使用cap.get(propId,value)来修改,
# value是你想要设置成的新值。eg:cap.set(3)、cap.get(4)默认是640*480; 但使用 ret=cap.set(3,320)和ret=cap.get(4,240)将宽高改为320*240
 1 import numpy as np
 2 import cv2
 3 #camera_number=0
 4 # cv2.CAP_DSHOW是作为一部分传递的标志,可以传递很多标志,这个特定于微软,是个附加值,若要打开摄像机2,可以执行cv2.CAP_DSHOW+1
 5 #cap=cv2.VideoCapture(0)
 6 # 使用上述的句子,报错[ WARN:0] global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (674) SourceReaderCB::~SourceReaderCB terminating async callback
 7 # 修改为下述句子
 8 cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
 9 
10 while(True):
11     # 逐帧捕获视频,返回一个布尔值,帧读取正确为true,通过检查他的返回值来查看视频文件是否已经到达了结尾
12     # 有时cap可能不能成功的而初始化摄像头设备,可以使用cap.isOpened()来检查是否成功初始化,返回True则没问题。否则使用函数cap.open()
13     # 可以使用函数cap.get(prpId)来获取视频的一些参数信息,这里propId可以是0-18之间的任何整数,每一个数代表视频的一个属性,其中一些值可以使用cap.get(propId,value)来修改,
14     # value是你想要设置成的新值。eg:cap.set(3)、cap.get(4)默认是640*480; 但使用 ret=cap.set(3,320)和ret=cap.get(4,240)将宽高改为320*240
15     ret,frame=cap.read()
16     # 对框架进行操作,转化为灰度视屏
17     gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
18     # 显示结果框架
19     cv2.imshow('frame',gray)
20     if cv2.waitKey(1)&0xFF==ord('q'):
21         break
22 # 完成所有操作后释放捕获
23 cap.release()
24 cv2.destroyAllWindows()

 


2、从文件中播放视频
和摄像头捕获一样,只需要把设备索引号该城视频文件的名字,在播放每一帧时,使用cv2.waiKey()设置适当的持续时间
设置太低播放快,设置高则播放慢,一般25毫秒即可
 1 import numpy as np
 2 import cv2
 3 cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
 4 fourcc=cv2.VideoWriter_fourcc(*'XVID')
 5 out=cv2.VideoWriter('output.avi',fourcc,20.0,(640,480))
 6 while(cap.isOpened()):
 7     ret,frame=cap.read()
 8     if ret==True:
 9         frame=cv2.flip(frame,0)
10         out.write('frame',frame)
11         if cv2.waitKey(1)&0xFF==ord('q'):
12             break
13     else:
14         break
15 cap.release()
16 out.release()
17 cv2.destroyAllWindows()

 

posted on 2020-05-17 10:47  墨小澄  阅读(544)  评论(0编辑  收藏  举报