昨天opencv-python安装和图像的操作笔记链接:https://blog.youkuaiyun.com/Nyte2018/article/details/88649272
今天学习关于视频的操作
Capture Video from Camera
想要获取视频,先创建一个VideoCapture对象,参数为可区分摄像头即可,简单点选0,1之类。
来看下面一段代码:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# Display the resulting frame
cv.imshow('frame',gray)
if cv.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()
cap.read():返回True或者False,即ret的值,如果能正确读出,就是true,因此这个函数搭配while(True)用来检测逐帧读视频有没有读完。frame代表每一帧的图片。当不能识别报错的时候,可以用cap.isOpened()来检测,如果返回True,则说明摄像头已打开,否则用cap.open()函数打开摄像头。
cap.get(propId):获取对象的特征,propld为0-18。每个数字代表video的一个特征(如果有这个特征的话)。
cap.set(propId, value):value为更改propld对应属性。
下面为propld表:
| propld | 函数名 | 函数作用 |
|---|---|---|
| 0 | cv.CAP_PROP_POS_MSEC | 以毫秒为单位获取视频现在的位置 |
| 1 | cv.CAP_PROP_POS_FRAMES | 基于0的帧获取下一帧 |
| 2 | cv.CAP_PROP_POS_AVI_RATIO | 视频相对位置,0代表开始,1代表结束 |
| 3 | cv.CAP_PROP_FRAME_WIDTH | 视频流中帧的宽度 |
| 4 | cv.CAP_PROP_FRAME_HEIGHT | 视频流中帧的高度 |
| 5 | cv.CAP_PROP_FPS | 帧速 |
| 6 | cv.CAP_PROP_FOURCC | 4个字符表示的视频编码器格式 |
| 7 | cv.CAP_PROP_FRAME_COUNT | 视频帧数 |
| 8 | cv.CAP_PROP_FORMAT | cv.VideoCapture.retrieve返回的Mat格式 |
| 9 | cv.CAP_PROP_MODE | 指示当前捕获模式的后端特定值 |
| 10 | cv.CAP_PROP_BRIGHTNESS | 图像的亮度(只适用于支持的相机) |
| 11 | cv.CAP_PROP_CONTRAST | 图像的对比度(只适用相机) |
| 12 | cv.CAP_PROP_SATURATION | 图像的饱和度(只适用相机) |
| 13 | cv.CAP_PROP_HUE | 图像的色相(只适用相机) |
| 14 | cv.CAP_PROP_GAIN | 图像的增益(只适用于支持的相机) |
| 15 | cv.CAP_PROP_EXPOSURE | 曝光(只适用于支持的相机) |
| 16 | cv.CAP_PROP_CONVERT_RGB | 图像是否能转变为RGM模式的布尔标志 |
| 17 | cv.CAP_PROP_WHITE_BALANCE_BLUE_U | 目前不支持 |
| 18 | cv.CAP_PROP_RECTIFICATION | 立体摄像机的整流标志(注意:目前只支持DC1394 v 2.x后端) |
cv.waitKey():等待键盘的输入,如果参数太小,视频会很快,反之会很慢,25毫秒比较正常。
cv.VideoWriter():保存视频。
下面来看一段代码:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv.flip(frame,0)
# write the flipped frame
out.write(frame)
cv.imshow('frame',frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv.destroyAllWindows()
解释:
fourcc = cv.VideoWriter_fourcc(‘XVID’):FourCC是代表四字符代码,视频播放软件通过查询 FourCC 代码并且寻找与 FourCC 代码相关联的视频解码器来播放特定的视频流。如MJPG可用cv.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’)或者cv.VideoWriter_fourcc(‘MJPG’)表示。
cv.VideoWriter(filename, fourcc, fps, frameSize[, isColor]):视频存储函数。参数包括文件名,fourcc,每秒传输帧数,帧大小,isColor默认值为True,如果非零,编 码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
cv.flip( src, flipCode[, dst] ):图像翻转函数。flipCode:如何翻转图片,正数(比如1)代表关于y轴对称,0代表关于x轴对称,负数(比如-1)代表关于x,y对称。dst默认输出与原图片大小与类型相同。
ord(’’):将字符转换为ASCII数字。0xFF是十六进制常数。q的ASCII为113。cv2.waitKey(1) 与 0xFF(1111 1111)相与是因为cv2.waitKey(1) 的返回值不止8位,但是只有后8位实际有效,为避免产干扰,通过 ‘与’ 操作将其余位置0。
本文是OpenCV-Python学习笔记的第二部分,主要介绍如何使用OpenCV处理视频,包括创建VideoCapture对象来捕获视频,使用cap.read()和cap.isOpened()检测视频读取状态,以及利用cv.VideoWriter()保存视频。还讲解了cv.waitKey()的作用和VideoWriter_fourcc()的含义。最后,提到了cv.flip()函数用于图像翻转。
27万+

被折叠的 条评论
为什么被折叠?



