摘要:这次开始学习从摄像头获取视频使用获取视频要获取视频,需要创建一个对象,参数可以是设备索引摄像头索引或视频文件的名称。
这次开始学习Getting Started with Videos
1从摄像头获取视频使用cv2.VideoCapture()获取视频.
cv2.VideoCapture(builtins.object)
要获取视频,需要创建一个VideoCapture对象,参数可以是设备索引(摄像头索引)或视频文件的名称。如果是设备索引,当只连接一台摄像机时,可以是0或-1;也可以通过传递1来选择第二个摄像头。
我们设cap = cv2.VideoCapture(0)
cap.open()
打开cap
cap.isOpened()
检测cap是否初始化成功,如果返回True,则初始化成都,否则使用cap.open()打开cap
cap.read()
返回两个值
首先返回一个bool值,如果能正确读取帧,则为True,否则为False.可以通过检查该返回值来检查视频的结尾.
再返回一个值,为每一帧的图像,该值是一个三维矩阵
Note :如果使用一个变量接受两个值,frame = cap.read() 则 frame 为一个元组,原来使用 frame 处需更改为 frame[1]
cap.get(propld)
通过cap.get(propld)访问视频的某些功能,propld是0到18之间的数字。每个数字表示视频的属性。
比如:
cap.get(cv2.CAP_PROP_FRAME_WIDTH)和cap.get(cv2.CAP_PROP_FRAME_HEIGHT)得到帧宽和高度.
如果想修改为320x240.只需使用
ret = cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)和
ret = cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240).
参数 | propld | 功能 |
---|---|---|
cv2.CAP_PROP_POS_MSEC | 0 | 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳 |
cv2.CAP_PROP_POS_FRAMES | 1 | 基于0的索引将被解码/捕获下一帧 |
cv2.CAP_PROP_POS_AVI_RATIO | 2 | 视频文件的相对位置:0 - 视频的开始,1 - 视频的结束 |
cv2.CAP_PROP_FRAME_WIDTH | 3 | 帧的宽度 |
cv2.CAP_PROP_FRAME_HEIGHT | 4 | 帧的高度 |
cv2.CAP_PROP_FPS | 5 | 帧速 |
cv2.CAP_PROP_FOURCC | 6 | 4个字符表示的视频编码器格式 |
cv2.CAP_PROP_FRAME_COUNT | 7 | 帧数 |
cv2.CAP_PROP_FORMAT | 8 | byretrieve()返回的Mat对象的格式 |
cv2.CAP_PROP_MODE | 9 | 指示当前捕获模式的后端特定值 |
cv2.CAP_PROP_BRIGHTNESS | 10 | 图像的亮度(仅适用于相机) |
cv2.CAP_PROP_CONTRAST | 11 | 图像对比度(仅适用于相机) |
cv2.CAP_PROP_SATURATION | 12 | 图像的饱和度(仅适用于相机) |
cv2.CAP_PROP_HUE | 13 | 图像的色相(仅适用于相机) |
cv2.CAP_PROP_GAIN | 14 | 图像的增益(仅适用于相机) |
cv2.CAP_PROP_EXPOSURE | 15 | 曝光(仅适用于相机) |
cv2.CAP_PROP_CONVERT_RGB | 16 | 表示图像是否应转换为RGB的布尔标志 |
cv2.CAP_PROP_WHITE_BALANCE | 17 | |
cv2.CAP_PROP_RECTIFICATION | 18 | 立体摄像机的整流标志 |
从摄像头获取视频,并将其转换为灰度视频并显示它.
代码 :
import numpy as np import cv2 cap = cv2.VideoCapture(0) while(True): # Capture frame-by-frame ret, frame = cap.read() # Our operations on the frame come here gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the resulting frame cv2.imshow("frame",gray) if cv2.waitKey(1) & 0xFF == ord("q"):#若检测到按键 ‘q’,退出 break # When everything done, release the capture cap.release()#释放摄像头 cv2.destroyAllWindows()#删除全部窗口
Note :最后不要忘记release capture
1从文件获取视频使用cv2.VideoCapture()获取视频.
cv2.VideoCapture(builtins.object)
与从摄像头获取视频相同,只是参数为视频文件的名称.
应用代码 :
import numpy as np import cv2 cap = cv2.VideoCapture("vtest.avi") while(cap.isOpened()): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow("frame",gray) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()
Note :
应为cv2.waitKey选择恰当的时间,如果设置太小,视频播放将非常快,如果设置太大,视频将显示慢动作,一般设置25毫秒.
在使用Video Capture时应确保安装了正确版本的ffmpeg 或gstreamer.
3保存视频使用cv2.VideoWriter()保存视频.
cv2.VideoWriter()
首先创建一个VideoWriter对象并指定输出文件名(例如:output.avi)。然后指定FourCC代码。然后应该传递每秒帧数(fps)和帧大小。最后一个是isColor标志。如果是True,则编码器需要彩色帧,否则它适用于灰度帧。
FourCC
用于指定视频编解码器的4字节代码,可以在fourcc.org中找到可用代码列表。它取决于平台.
•在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2.(XVID更为可取.MJPG会产生高大小的视频.X264可以提供非常小的视频)
•在Windows中:DIVX(更多要测试和添加)
•在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)
FourCC代码通过cv2.VideoWriter_fourcc()传递
比如:
对于MJPG,FourCC代码作为cv2.VideoWriter_fourcc("M","J","P","G")或cv2.VideoWriter_fourcc(*"MJPG")传递.
从摄像头获取视频,在垂直方向上翻转每一帧并保存它.
代码 :
import numpy as np import cv2 cap = cv2.VideoCapture(0) # Define the codec and create VideoWriter object fourcc = cv2.VideoWriter_fourcc(*"XVID") out = cv2.VideoWriter("output.avi",fourcc, 20.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: frame = cv2.flip(frame,0) # write the flipped frame out.write(frame) cv2.imshow("frame",frame) if cv2.waitKey(1) & 0xFF == ord("q"): break else: break # Release everything if job is finished cap.release() out.release() cv2.destroyAllWindows()
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41970.html
怎么从0到1学习Python呢?Python中的知识点,涉及到内容主要是Python Opencv,用于人工智能,机器学习模拟相关的数据,那么,里面的一些较为基础的知识点,涉及到的内容是什么呢?下面就给大家详细解答下。 OpenCV是一个流行的开源计算机视觉库,可用于不同的编程语言,例如Python、C++和JavaScript。它提供了一套丰富的工具来处理和分析图像和视频,让你可以从调整单...
阅读 1761·2023-04-25 14:33
阅读 3339·2021-11-22 15:22
阅读 2142·2021-09-30 09:48
阅读 2664·2021-09-14 18:01
阅读 1710·2019-08-30 15:55
阅读 2988·2019-08-30 15:53
阅读 2107·2019-08-30 15:44
阅读 633·2019-08-30 10:58