1.从视频文件中获取图像。
使用cap = cv2.videocapture('文件名')构建视频文件的cap实例。cap.read()方法逐帧提取视频,每一帧都是一幅图像。cap.read()方法返回二进制组,下标0的元素值为True或False。如果为false,则表示读取文件已完成。下标1的元素是i***ge对象,也是numpy数组类型的数据。Cap.isopen()用于检查Cap实例是否打开。Cap.release()释放实例。在下面的例子中,视频文件被读取并显示,以达到播放的效果。同时增加了waitKey()返回值的判断。您可以按下“Q”或“Q”键退出循环。这里先将waityKey()返回的值与0xff phase进行比较,再与字符的ord()值进行比较,以避免某些系统中waitKey()返回的值在high byte不为零的情况。
import cv2cap = cv2.VideoCapture('..\vtest.avi')while cap.isOpened(): ret, img = cap.read() if ret is not True: print("读取完成,退出") break #处理img cv2.imshow('vedio', img) #检查按键 key = cv2.waitKey(20) & 0xff if key == ord('q') or key == ord('Q') : break print('cap.isOpened():',cap.isOpened())cap.release()print('cap.isOpened():',cap.isOpened())
运行结果:
cap.isOpened(): Truecap.isOpened(): False
从运行结果来看,cap.isopen()的返回值在cap.release()之前始终为真。
2.从动态图片中获取图像。
使用VideoCapture(文件名)方法打开gif格式图片,操作过程和上面提到的普通视频文件类似。
3.从摄像机中获取图像。
要打开摄像机,您需要使用摄像机的设备号(数字整数)作为VideoCapture(摄像机号)的输入。比如cap = cv2。VideoCapture(0)构建一个编号为0的摄像机访问实例,第二个摄像机传入1,依此类推。后续步骤的处理方法与读取视频文件相同。
import cv2cap = cv2.VideoCapture(0)while cap.isOpened(): ret, img = cap.read() if ret is not True: print("读取失败,退出") break #处理img cv2.imshow('vedio', img) #检查按键 key = cv2.waitKey(20) & 0xff if key == ord('q') or key == ord('Q') : break print('cap.isOpened():',cap.isOpened())cap.release()print('cap.isOpened():',cap.isOpened())
4.写视频文件。
要编写视频文件,需要创建一个VideoWriter对象,并依次传入四个参数:
第1个为文件名称;第2个为编码方式,其中编码方式和文件名称后缀有对应关系;第3个参数为每秒写入的帧数,参考数值为25,符合人眼习惯;第4个参数是图像大小,int类型;
常用文件名的后缀与编码方式的对应关系如下:
文件后缀编码方式aviXVIDaviMJPGavimp4v(小写)mp4mp4v(小写)
编码方法需要创建一个VideoWriter_fourcc对象。例如,您可以通过以下两种方式创建MJPG类型编码:
fourcc=cv2.VideoWriter_fourcc('M','J','P','G')fourcc=cv2.VideoWriter_fourcc(*'MJPG')
图像大小可以通过cat.get(propId)方法获得,但是这个方法获得的是float类型,需要转换成int类型,然后传入VideoWriter。
cap = cv2.VideoCapture(0)width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)width = int(width)height = int(height)
以下是使用三种编码方法创建视频文件的示例:XVID、MJPG和mp4v:
import cv2 #获取图像宽高cap = cv2.VideoCapture(0)width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)width = int(width)height = int(height)print(width,height) #创建VideoWriter对象fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter('output.avi', fourcc, 25.0, (width, height))fourcc = cv2.VideoWriter_fourcc(*'MJPG')out2 = cv2.VideoWriter('output2.avi', fourcc, 25.0, (width, height))fourcc = cv2.VideoWriter_fourcc(*'mp4v')out3 = cv2.VideoWriter('output3.mp4', fourcc, 25.0, (width, height))while cap.isOpened(): ret, img = cap.read() print(img.shape) if ret is not True: print("读取失败,退出") break #处理img cv2.imshow('vedio', img) out.write(img) out2.write(img) out3.write(img) #检查按键 key = cv2.waitKey(1) & 0xff if key == ord('q') or key == ord('Q') : break cap.release()out.release()out2.release() out3.release()
本文来自浅沫投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/557368.html