首页 > 解决方案 > 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中的一个开放问题

标签: pythonopencv

解决方案


推荐阅读