当前位置:   article > 正文

读取视频或摄像头,并进行保存帧图像_ret, frame = cap.read()

ret, frame = cap.read()

一、语法:cap = cv2.VideoCapture(0)
说明:参数0表示默认为笔记本的内置第一个摄像头,如果需要读取已有的视频则参数改为视频所在路径路径,例如:cap=cv2.VideoCapture('video.mp4')

二、语法:cap.isOpened()
说明:判断视频对象是否成功读取,成功读取视频对象返回True。

三、语法:ret,frame = cap.read()
说明:按帧读取视频,返回值ret是布尔型,正确读取则返回True,读取失败或读取视频结尾则会返回False。frame为每一帧的图像,这里图像是三维矩阵,即frame.shape = (640,480,3),读取的图像为BGR格式。

四、语法:key = cv2.waitKey(1)
说明:等待键盘输入,参数1表示延时1ms切换到下一帧,参数为0表示显示当前帧,相当于暂停。

cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,

参数是1,表示延时1ms切换到下一帧图像,对于视频而言;

参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;

参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。

五、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。

六、读取摄像头并保存为视频代码演示:

  1. import cv2
  2. def videocapture():
  3. cap=cv2.VideoCapture(0) #生成读取摄像头对象
  4. width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取视频的宽度
  5. height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取视频的高度
  6. fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
  7. fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #视频的编码
  8. #定义视频对象输出
  9. writer = cv2.VideoWriter("video_result.mp4", fourcc, fps, (width, height))
  10. while cap.isOpened():
  11. ret, frame = cap.read() #读取摄像头画面
  12. cv2.imshow('video', frame) #显示画面
  13. key = cv2.waitKey(24)
  14. writer.write(frame) #视频保存
  15. # 按Q退出
  16. if key == ord('q'):
  17. break
  18. cap.release() #释放摄像头
  19. cv2.destroyAllWindows() #释放所有显示图像窗口
  20. if __name__ == '__main__' :
  21. videocapture()

七、读取视频并按帧进行保存代码演示:

  1. import numpy as np
  2. import cv2
  3. import os
  4. def video2image(video_dir,save_dir):
  5. cap = cv2.VideoCapture(video_dir) #生成读取视频对象
  6. n = 1 #计数
  7. width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) #获取视频的宽度
  8. height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) #获取视频的高度
  9. fps = cap.get(cv2.CAP_PROP_FPS) #获取视频的帧率
  10. fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) #视频的编码
  11. # 定义视频输出
  12. #writer = cv2.VideoWriter("video_02_result.mp4", fourcc, fps, (width, height))
  13. i = 0
  14. timeF = int(fps) #视频帧计数间隔频率
  15. while cap.isOpened():
  16. ret,frame = cap.read() #按帧读取视频
  17. #到视频结尾时终止
  18. if ret is False :
  19. break
  20. #每隔timeF帧进行存储操作
  21. if (n % timeF == 0) :
  22. i += 1
  23. print('保存第 %s 张图像' % i)
  24. save_image_dir = os.path.join(save_dir,'%s.jpg' % i)
  25. print('save_image_dir: ', save_image_dir)
  26. cv2.imwrite(save_image_dir,frame) #保存视频帧图像
  27. n = n + 1
  28. cv2.waitKey(1) #延时1ms
  29. cap.release() #释放视频对象
  30. #读取文件夹所有视频,每个视频按帧保存图像
  31. def video2image_multi(video_path,save_path):
  32. video_list = os.listdir(video_path)
  33. for i in range(len(video_list)) :
  34. video_dir = os.path.join(video_path,video_list[i])
  35. cap = cv2.VideoCapture(video_dir)
  36. fps = cap.get(cv2.CAP_PROP_FPS) # 视频的帧率
  37. save_num = 0
  38. n = 1 #计数
  39. timeF = int(fps) # 视频帧计数间隔频率
  40. while cap.isOpened():
  41. ret,frame = cap.read()
  42. if ret is False :
  43. break
  44. #每隔timeF帧进行存储操作
  45. if (n % timeF == 0) :
  46. save_num += 1
  47. save_image_dir = os.path.join(save_path,'%s_%s.jpg' % (i,save_num))
  48. cv2.imwrite(save_image_dir,frame)
  49. n = n + 1
  50. cv2.waitKey(1)
  51. cap.release()
  52. print('读取第 %s 个视频完成 !!!' % i)
  53. if __name__ == '__main__' :
  54. video2image(r'E:\AI\video.mp4', r'E:\AI\video2image')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/280249?site
推荐阅读
相关标签
  

闽ICP备14008679号