解决opencv输出视频无法正常播放问题

最近在利用opencv-python截取触发点时刻视频流的过程中遇到一个问题:利用opencv截取的视频片段无法正常播放。
上网查阅很多方法,花了很长时间才得以解决。
由查得的方法总结,可能存在的问题包括几方面:
1.编码方式不对
2.视频写入的图像尺寸与画布尺寸不对应

下面提供一段读取的代码,按照此格式改写自己的需求代码即可。

import numpy as np
import cv2

cap = cv2.VideoCapture('test.mp4')
fourcc = cv2.VideoWriter_fourcc(*'MJPG')

width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("width:",width, "height:", height)

out = cv2.VideoWriter('output.avi', fourcc, 20.0, (width, height))

while (cap.isOpened()):
  ret, frame = cap.read()
  if ret == True:
    out.write(frame)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
      break
  else:
    break
    
cap.release()
out.release()
cv2.destroyAllWindows()
  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 要在 OpenCV播放视频,需要使用 VideoCapture 和 VideoWriter 两个类。以下是一个简单的示例代码: ```python import cv2 # 打开视频文件 cap = cv2.VideoCapture('my_video.mp4') # 检查是否成功打开 if not cap.isOpened(): print("无法打开视频文件") # 获取帧率 fps = cap.get(cv2.CAP_PROP_FPS) # 创建窗口 cv2.namedWindow('Video', cv2.WINDOW_NORMAL) # 循环读取每一帧并显示 while cap.isOpened(): ret, frame = cap.read() if ret: cv2.imshow('Video', frame) if cv2.waitKey(int(1000/fps)) & 0xFF == ord('q'): break else: break # 释放资源 cap.release() cv2.destroyAllWindows() ``` 在这个示例中,我们首先打开视频文件并检查是否成功打开。然后,我们获取视频的帧率,并创建一个窗口来显示视频。接下来,我们循环读取每一帧并显示,直到视频播放完毕或用户按下 'q' 键停止播放。最后,我们释放资源并关闭窗口。 注意:在使用 OpenCV 播放视频时,可能会出现一些兼容性问题,具体取决于你的操作系统和 OpenCV 版本。如果遇到问题,可以尝试更新 OpenCV 或更换操作系统。 ### 回答2: OpenCV是一个开源的计算机视觉库,它提供了许多功能来处理图像和视频。要在OpenCV播放视频,首先需要确保你已经安装了OpenCV库并设置好了运行环境。 步骤如下: 1.导入OpenCV库: ```python import cv2 ``` 2.打开视频文件: ```python video = cv2.VideoCapture('video.mp4') # video.mp4为你要播放视频文件名 ``` 3.检查视频是否成功打开: ```python if not video.isOpened(): print("视频文件无法打开") exit() ``` 4.读取视频帧并播放: ```python while True: ret, frame = video.read() if not ret: print("视频已结束") break cv2.imshow('Video', frame) # 显示帧 # 设置q键为退出键 if cv2.waitKey(25) & 0xFF == ord('q'): break ``` 5.释放资源: ```python video.release() cv2.destroyAllWindows() ``` 在以上代码中,第4步的循环不断读取视频帧,并使用`cv2.imshow()`方法显示每一帧。`cv2.waitKey(25)`等待25毫秒来检测键盘输入,如果按下的键是'q'键,则退出循环。 最后,释放视频资源并关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小屋*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值