写视频
# encoding: utf-8 ''' @author: gaoyongxian666 @file: opencv_video_write.py @time: 2018/4/15 11:12 ''' import cv2 # 默认是摄像头,如果是路径就是播放文件 # 他的参数可以是 设备的索引号,或者是一个视频文件。 # 设备索引号就是在指定要使用的摄像头。一般的笔记本电脑都有内置摄像头。所以参数就是 0。 # 你可以通过设置成 1 或 者其他的来选择别的摄像头。 cap = cv2.VideoCapture(0) # 这是一个获取视频的对象 # 创建视频写对象,可以将图片(或者摄像头)合成视频。 # 这是用opencv生成的fourcc codec,或者说是编码器 # Define the codec and create VideoWriter object # FourCC 就是一个 4 字节码,用来确定视频的编码格式。可用的编码列表 可以从fourcc.org查到。 # 不同的平台依赖不同的编码格式:windows DIVX,linux DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 gives very small size video fourcc = cv2.VideoWriter_fourcc(*'DIVX') # 这次我们要创建一个 VideoWriter 的对象。 # 第一个参数:输出文件 的名字。 # 第二个参数:指定 FourCC 编码。 # 第三四个参数:播放频率和帧的大小。 # 最后一个参数: isColor 标签。如果是 True,每一帧就是彩色图, out = cv2.VideoWriter('output.mp4',fourcc, 20.0, (640,480)) while(cap.isOpened()): ret, frame = cap.read() if ret==True: # cv2里面用于翻转图像 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()
读视频:
# encoding: utf-8 ''' @author: gaoyongxian666 @file: opencv_video_read.py @time: 2018/4/15 10:42 ''' import cv2 # 声明一个 VideoCapture 对象。他的参数可以是 设备的索引号,或者是一个视频文件。 # 设备索引号就是在指定要使用的摄像头。 # 一般的笔记本电脑都有内置摄像头。所以参数就是 0。你可以通过设置成 1 或 者其他的来选择别的摄像头。 # 之后,你就可以一帧一帧的捕获视频了。 # 有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报错。你可以使用 cap.isOpened(), # 来检查是否成功初始化了。如果返回值是 True,那就没有问题。否则就要使用函数 cap.open()。 cap = cv2.VideoCapture(0) # cap.get(propId) # 你可以使用函数 cap.get(propId) 来获得视频的一些参数信息。这里 propId 可以是 0 到 18 之间的任何整数。每一个数代表视频的一个属性 # cap.set(propId,value) # 其中的一些值可以使用 cap.set(propId,value) 来修改,value 就是 你想要设置成的新值。 # 例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。 默认情况下得到的值是 640X480。 # 但是我可以使用 ret=cap.set(3,320) 和 ret=cap.set(4,240) 来把宽和高改成 320X240。 # 注意:当你的程序报错时,检查是否初始化成功 # cap.isOpened() # cap.open():如果没有初始化成功,调用打开方法 while (cap.isOpened()): # while (True): # Capture(捕获) frame-by-frame # cap.read() # 返回两个值,一个布尔值(True/False)一个ndarray值。 # 如果帧读取的是正确的,就是 True。 # 所以最后你可以通过检查他的返回值来查看视频文件是否已经到了结尾。 # ndarray是抓取、解码并返回下一个视频帧 # <class 'numpy.ndarray'>,抓取不到返回为None ret,frame = cap.read() print(ret) print(frame) print(type(frame)) # 在这里进行对每一帧的操作 # Our operations on the frame come here gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Display the resulting frame print(gray.shape) # 加上字 font = cv2.FONT_HERSHEY_SIMPLEX img=cv2.putText(gray, 'OpenCV', (10, 180), font, 5, (255, 255, 255), 20) cv2.imshow('frame',img) cv2.waitKey(25) if cv2.waitKey(1) & 0xFF == ord('q'): break # When everything done, release the capture cap.release() cv2.destroyAllWindows()