python - Opencv:使用 cv2.videocapture.set(CAP_PROP_POS_MSEC/CAP_PROP_POS_FRAMES) 获取错误的特定帧
问题描述
我遇到了一个错误。我无法cap.set(CAP_PROP_POS_MSEC/CAP_PROP_POS_FRAMES)
在 python 2.7.3 中使用 opencv 3.4.2 获取 .mov 视频中的特定帧。是否有人在 .mov 视频中遇到这种情况。
我系统的管道是通过cap.read()从第一帧到结束的视频上的一些算法检测关键帧。然后我将保存我自己计算的关键帧id。最后,我使用cap.set( CAP_PROP_POS_MSEC/CAP_PROP_POS_FRAMES)通过关键帧 id 获取视频中的特定帧。这是代码:
def detectkeyframe():
cap = cv2.VideoCapture(video_path)
frame_id = 0
key_frame_ids=[]
while True:
ret,frame = cap.read()
if not ret:
break
if it is a key frame:
key_frame_ids.append(frame_id)
cv2.imwrite(frame) #saved for comparing
frame_id +=1
def dumpkeyframe(key_frame_ids):
cap = cv2.VideoCapture(video_path)
for frame_id in key_frame_ids:
cap.set(CAP_PROP_POS_FRAMES,frame_id)
#cap.set(CAP_PROP_POS_MSEC,timeofframe_id) #it is also useless
ret,frame = cap.read() #frame obtained is always ahead of the real frame i want
cv2.imwrite(frame)
两个函数保存的帧不一样,帧dumpkeyframe()
总是在帧的前面detectkeyframe()
有人告诉我哪里错了吗?我发现了其他人遇到的一些类似问题:opencv github中的一个开放问题
解决方案
推荐阅读
- javascript - 如何删除数组不同对象中的相似键
- python - 为什么我不断收到错误“min() arg is an empty sequence”?
- javascript - V-model 没有监听输入的值变化(vuejs)
- powershell - 使用 ExecutionPolicy ByPass 启动 powershell 脚本但无法正常工作
- powershell - 在 PowerShell 中使用正则表达式提取文本部分并输出到新文件
- angular-material - Angular Material Mat-video 字幕按钮未在任何浏览器上显示
- javascript - 通过单击按钮重置 json 文件
- php - 使用 JSON 原始数据请求正文逻辑
- bash - 有一个不应硬编码但应在规则调用时作为参数传递的参数
- outlook - Microsoft Apps Api Endpoint RuntimeError "error"=>"code"=>"BadRequest", "message"=>"Request not applicable to target tenant.",