Я искал что-то вроде этого, но я не мог найти его здесь.
Некоторые фон
Я использую opencv для извлечения кадров из видеофайла. Обычно люди делают это в бесконечном цикле, например:
while (True):
s, img = cv.read()
или
for i in xrange(10000): #just a big number
s, img = cv.read()
теперь я хочу получить все кадры и выйти из цикла, когда больше нет кадров. Однако мои навыки в python недостаточно сильны, чтобы делать то, что я хочу делать.
Что я хочу знать
read
функция (или метод, я не знаю, как они вызывается в python) возвращает кортеж: сначала представляет успех операции, а второй представляет возвращенный фрейм. Я хочу разбить цикл while, когда первый элемент кортежа является ложным. Имея фон C, я подумал, что, возможно, это сработает:
while ((success, img = capture.read())[0]):
#do sth with img
Я думал, что это сломает цикл, когда успех будет ложным. Но это не так. Тогда я подумал, что это сработает:
while ((success, img = capture.read()).success):
#do sth with img
он тоже не работал. Я не хочу делать что-то вроде
while(True):
s, i = capture.read()
if (s == False):
break
Как проверить условие в while
, а не на if
, которое прерывается, если оно успешное?