OpenCV становится очень медленным при использовании cap.set (cv2.CAP_PROP_POS_FRAMES - PullRequest
1 голос
/ 28 января 2020

Я использую следующий код для создания простого видеопроигрывателя, но я видел, что когда я представляю строку cap.set (cv2.CAP_PROP_POS_FRAMES, arg), весь процесс становится очень медленным при воспроизведении видео. Плеер правильно работает с трекбаром, но скорость очень низкая. В общем, я заметил, что каждый раз, когда вы используете команду cap.set (cv2.CAP_PROP_POS_FRAMES, ...), скорость становится намного медленнее, чем когда игрок запускает команду «ret, frame = cap.read ()», не устанавливая номер кадра I необходимо использовать cv2, потому что цель работы состоит в том, чтобы обрабатывать все кадры путем наложения текста на каждый кадр и показывать на проигрывателе (код наложения текста здесь еще не написан)

import cv2


def on_trackbar(arg):
        global cap
        cap.set(cv2.CAP_PROP_POS_FRAMES,arg)


filevideo = r'D:\Documenti\Regate\Progetti\VideoOverlayData\Sviluppo\VideoOverlayData\INPUTFILES\28AugRace5.MP4'
cap = cv2.VideoCapture(filevideo)
Videofps = cap.get(cv2.CAP_PROP_FPS)
nr_of_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))

if (cap.isOpened() == False):
        print("Error opening video stream or file")

cv2.namedWindow('Frame', cv2.WINDOW_KEEPRATIO)
cv2.createTrackbar("F", "Frame", 0, nr_of_frames, on_trackbar)
videoCurrentFrameNumber = 0
while(cap.isOpened()):
       # cap.set(1,videoCurrentFrameNumber)
        ret, frame = cap.read()
        if ret is True:
            cv2.imshow('Frame',frame)
            videoCurrentFrameNumber = int(cap.get(cv2.CAP_PROP_POS_FRAMES))
            #cap.set(cv2.CAP_PROP_POS_FRAMES,videoCurrentFrameNumber)
            #cap.set(5,50)
            cv2.setTrackbarPos('F','Frame',videoCurrentFrameNumber)
            #videoCurrentFrameNumber = videoCurrentFrameNumber +1
            frameclick = cv2.waitKey(1) & 0xFF
            if frameclick == ord('q'):
                   break
cap.release()
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...