当然还可以从视频中抓取截图,所以现在聊一下常用的抓取视频截图的的方法。
VideoCapture 方法
cv2.VideoCapture();cv2.VideoCapture( device);cv2.VideoCapture(filename);
上面有三种构造方法,
-
第一种是无法构造方法。
-
第二种参数device是一个数字。
一般笔记本如此写cv2.VideoCapture(0); 因为默认是0 ,如果有多个摄像头,就需要看设置的摄像头代表的数字了。
-
第二种参数device是一个字符串。
其代表是从视频文件种得到帧。
release 方法
释放资源的方法:
cap = cv2.VideoCapture();
cap.release()
read 方法
read方法就是读取视频的帧的方法。
cap = cv2.VideoCapture();
cap.read()
- read() 方法返回的有两个值
- 第一个值:为状态值,读到帧就是true
- 第二个值:返回的视频帧,通俗的说就是图片
来一个例子:
import cv2
Cap = cv2.VideoCapture("1.mp4");
flag,phto= Cap.read();cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
cv2.imshow("Wind",phto)key=cv2.waitKey(0)if key=="q":cv2.destroyWindow()
Cap.release()
但是如果观察效果的话,会发现这是窗口只有镜头内容。
所以需要用一个while循环
import cv2
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
while True:flag, phto = Cap.read();if flag:cv2.imshow("Wind",phto)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()
isOpened方法
这个方法是判断摄像头和文件是发可以正常打开,返回True 或 False:
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
# 可以使用判断是否摄像头打开 作为标识符值
Cap.isOpened()
可以读取文件的方法修改为:
import cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened(): 可以使用判断是否摄像头打开 以及文件是否可以正常打开
while Cap.isOpened():flag, phto = Cap.read();if flag:cv2.imshow("Wind",phto)# cv2.resizeWindow("Wind", 1920, 1080)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()
补充
这里补充一点 如果再循环外:
cv2.resizeWindow("Wind", 1920, 1080)
只会在循环种呈现一次,如果真的需要,那就行说在循环体内再写一遍。
VideoWriter方法
有时候,打开摄像头等,需要将内容保存到本地,所以就需要这个方法:
如下:
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
-
filename
(必选):要写入的视频文件的名称。 -
fourcc
(必选):用于指定视频编解码器的4个字符代码。例如,'MJPG’表示Motion JPEG编码。fourcc = cv2.VideoWriter_fourcc(*'MJPG')
-
fps
(必选):视频的帧率,以每秒帧数(FPS)为单位。 -
frameSize
(必选):视频帧的大小,以像素为单位。 -
isColor
(可选):一个布尔值,指示是否使用彩色。如果为True,则使用彩色,否则为灰度。
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
不过这个等于创建了个对象,还需要进入写入,所以需要在用如下方法:
#frame = cv2.imread('frame.jpg') 或者是视频 flag, frame = Cap.read();
out.write(frame)
结合如下写:
import cv2
# 如果是通过摄像头的话
# Cap = cv2.VideoCapture(1);
Cap = cv2.VideoCapture("1.mp4");
cv2.namedWindow("Wind", cv2.WINDOW_NORMAL)
filename = 'tang1.avi'
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
fps = 30.0
frameSize = (640, 480)
isColor = True# 创建VideoWriter对象
out = cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
# cv2.resizeWindow("Wind", 1920, 1080)
# Cap.isOpened(): 可以使用判断是否摄像头打开 以及文件是否可以正常打开
while Cap.isOpened():flag, frame = Cap.read();if flag:cv2.imshow("Wind",phto)out.write(frame)# cv2.resizeWindow("Wind", 1920, 1080)key=cv2.waitKey(1)if(key & 0xFF == ord('q')):breakelse:break
Cap.release()
#释放VideoWriter
Cap.release()
cv2.destroyAllWindows()