Как я понял, вы пытаетесь обработать каждый четвертый кадр. Вы используете условие:
if count % 4 != 0
, который вместо этого запускает 3 из 4 кадров (вы обрабатываете кадры 1, 2, 3, 5, 6, 7 и т. Д.)! Используйте противоположное:
if count % 4 == 0
Кроме того, хотя фрагменты кода, кажется, что два метода не обрабатывают одинаковые кадры. Хотя в обоих случаях ваш счетчик увеличивается на 1 в каждом кадре, вы фактически указываете на 15-кратный кадр этого счетчика во втором случае (cap.set(cv2.CV_CAP_PROP_POS_FRAMES, count*15)
.
Некоторые комментарии к вашему коду (возможно, я что-то неправильно понял):
Дело 1:
while cap.isOpened():
success, frame = cap.read()
if count % 4 !=0:
count += 1
continue
здесь вы, кажется, считаете только некоторые кадры (3 из 4, как упоминалось), поскольку кадры, кратные 4, пропускаются: условие count % 4 !=0
в этом случае не выполняется, и ваш счетчик не обновляется, хотя вы читаете кадр , Итак, у вас здесь неточный счетчик. Не показано, как и где вы обрабатываете ваши кадры, чтобы судить об этой части.
Дело 2:
while True:
if count % 4 != 0:
cap.set(cv2.CV_CAP_PROP_POS_FRAMES, count*15)
count+=1
success, frame = cap.read()
здесь вы читаете фреймы, только если условие выполнено, поэтому в этом фрагменте кода вы фактически не читаете ни одного фрейма, так как фрейм 0 не вызывает условие! Если вы обновите счетчик за пределами области действия if, это не ясно здесь. Но если вы делаете, вы также должны прочитать кадр там. Во всяком случае, нужно сказать больше кода, чтобы рассказать.
В качестве общего совета вы должны обновлять счетчик каждый раз, когда читаете фрейм.