当前位置:   article > 正文

Python OpenCV 影像处理:读取、显示、储存影片_python opencv 展示视频

python opencv 展示视频

► 前言

本篇将介绍使用OpenCV Python撷取网路摄影机(webcam)的即时画面影像处理与显示,以及透过读取、显示和储存硬盘中的影片档案来实现影片操作。这将帮助大家了解如何使用OpenCV在影片上进行各种操作。

► OpenCV Python撷取网路摄影机

OpenCV首先建立了一个VideoCapture物件,指定了网路摄影机的索引,使用再透过 cap.isOpened() 来判断影片是否正常开启,正常开启会回传 True,失败则是 False。能够正常开启后进入一个无穷回圈,每次回圈透过函数read从摄影机中读取一帧影像,再于视窗上进行显示。其中还可以透过cap.get(propID): 获取影片的属性值以及cap.set(propID, value): 设置影片的属性值。

  1. import cv2
  2. # 使用网路摄影机的预设索引(通常为0
  3. camera_index = 0
  4. # 建立VideoCapture物件,指定网路摄影机的索引
  5. cap = cv2.VideoCapture(camera_index)
  6. # 检查摄影机是否成功开启
  7. if not cap.isOpened():
  8. print("无法开启摄影机")
  9. exit()
  10. # 设定摄影机属性,例如帧宽度和帧高度
  11. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
  12. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
  13. # 获取摄影机属性值,例如帧宽度和帧高度
  14. width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
  15. height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
  16. print("摄影机帧宽度:", width)
  17. print("摄影机帧高度:", height)
  18. while True:
  19. # 读取当前帧的影像
  20. ret, frame = cap.read()
  21. # 检查是否成功读取影像
  22. if not ret:
  23. print("无法读取影像")
  24. break
  25. # 显示当前帧的影像
  26. cv2.imshow("Webcam", frame)
  27. # 按下Esc键退出回圈
  28. if cv2.waitKey(1) == 27:
  29. break
  30. # 释放摄影机资源并关闭视窗
  31. cap.release()
  32. cv2.destroyAllWindows()

► OpenCV Python 读取与显示影片

OpenCV读取影片只需要在cv2.VideoCapture中传入的参数从camera index 改为影片档案位置,(档案相对路径、绝对路径都可以),就可以进行OpenCV 读取硬盘中的影片操作了。

  1. import cv2
  2. # 影片档案的路径
  3. video_path = 'path/to/your/video/file.mp4'
  4. # 建立VideoCapture物件,指定影片档案路径
  5. cap = cv2.VideoCapture(video_path)
  6. # 检查影片是否成功开启
  7. if not cap.isOpened():
  8. print("无法开启影片档案")
  9. exit()
  10. # 设定影片属性,例如帧宽度和帧高度
  11. cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
  12. cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
  13. # 获取影片属性值,例如帧宽度和帧高度
  14. width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
  15. height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
  16. print("影片帧宽度:", width)
  17. print("影片帧高度:", height)
  18. while True:
  19. # 读取当前帧的影像
  20. ret, frame = cap.read()
  21. # 检查是否成功读取影像
  22. if not ret:
  23. print("影片读取完成或无法读取影像")
  24. break
  25. # 显示当前帧的影像
  26. cv2.imshow("Video Playback", frame)
  27. # 按下Esc键退出回圈
  28. if cv2.waitKey(1) == 27:
  29. break
  30. # 释放影片资源并关闭视窗
  31. cap.release()
  32. cv2.destroyAllWindows()

► OpenCV Python 储存影片

OpenCV使用以下函数(cv2.VideoWriter) 将影像帧序列写入为影片档案,透过以下参数进行相关设定。

  1. filename:指定储存的影片档案路径,例如 "output/video.mp4"
  2. fourcc:指定影片的编码方式,使用四个字符的代码。常见的几种编码方式包括:
  3. MP4V:MP4编码(需要安装MPEG-4编码库)。
  4. XVID:XVID编码(需要安装XVID编码库)。
  5. MJPG:Motion-JPEG编码。
  6. fps:指定影片的帧率(每秒的帧数),例如 30 表示每秒 30 帧。
  7. frameSize:指定影片的帧尺寸,可以是 (width, height) 的元组或整数值。
  8. isColor:指定是否要储存彩色影像。预设为True

最后将上面的撷取网路摄影机与储存影片组合,就可以透过OpenCV进行影片的读取、显示与储存。

  1. import cv2
  2. # 设定网路摄影机索引,0表示第一个网路摄影机
  3. camera_index = 0
  4. # 建立VideoCapture物件,指定网路摄影机索引
  5. cap = cv2.VideoCapture(camera_index)
  6. # 设定影片的储存器
  7. fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 使用MP4编码
  8. output_path = 'path/to/save/output/video.mp4'
  9. fps = 30 # 帧率
  10. frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  11. frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
  12. out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height))
  13. while True:
  14. # 读取当前帧的影像
  15. ret, frame = cap.read()
  16. # 检查是否成功读取影像
  17. if not ret:
  18. print("无法读取影像")
  19. break
  20. # 显示当前帧的影像
  21. cv2.imshow("Camera", frame)
  22. # 储存当前帧的影像到输出影片
  23. out.write(frame)
  24. # 按下Esc键退出回圈
  25. if cv2.waitKey(1) == 27:
  26. break
  27. # 释放资源并关闭视窗
  28. cap.release()
  29. out.release()
  30. cv2.destroyAllWindows()​

►Q&A 

问题一:为甚么读取图像错误?

在读取图像时,如果指定的图像路径不正确,将无法读取图像。因此,要确保提供正确的路径和档案名称。建议采用全英文路径进行读取。

问题二:影像分辨率不正确

网路摄影机可能支援多种分辨率,但程式码中可能未正确设定所需的分辨率。确保程式码中的分辨率设定与摄影机的 支援分辨率相匹配,以获得正确的影像分辨率。

问题三:影像变形或畸变

网路摄影机可能具有广角或鱼眼镜头,这可能导致影像变形或畸变。在显示或储存影像之前, 你可能需要进行校正或去除畸变的处理。这可以通过适当的校正技术,如相机校正或鱼眼校正,来实现。

问题四:影片播放速度问题

在读取和显示影片时,可能会遇到播放速度不正确的问题,导致影片过快或过慢。这可能是由于设定的帧率不正确或影片本身的帧率不匹配所引起。 检查帧率设定,确保它与影片的实际帧率相符。

问题五:影片编码问题

在储存影片时,可能会遇到编码问题,导致储存的影片无法正常播放或读取。这可能是由于使用不支援的编码方式或编码参数设定不正确所引起。 确保选择适当的编码方式并正确设定编码参数,以确保储存的影片能够顺利播放和读取。

► 小结

透过以上讲解,搭配程式码进行范例讲解与Q&A进行问题解惑,相信各位对于OpenCV撷取网路摄影机的即时画面影像处理与显示,以及透过读取、显示和储存硬盘中的影片档案来实现影片操作能有更深刻的理解,期待下一篇博文吧!

参考资料    

OpenCV - Open Computer Vision Library

欢迎登录大大通,了解更多原厂技术方案、学习教程吧!

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

闽ICP备14008679号