Então, eu segui este tutorial, mas não parece fazer nada. Simplesmente nada. Ele espera alguns segundos e fecha o programa. O que está errado neste código?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Além disso, nos comentários diz que isso limita os frames a 1000? Por quê?
EDIT: Eu tentei fazer success = True
primeiro, mas não ajudou. Ele criou apenas uma imagem com 0 bytes.
python
python-2.7
opencv
GShocked
fonte
fonte
success
?True
ouFalse
?print success
algum lugar.success
; se for falso, isso significa que a leitura do vídeo falhou por algum motivo. Você precisa fazer isso funcionar primeiro.brew install opencv --python27 --ffmpeg
se estiver usando uma versão diferente do Python, você precisará alterá-la para a sua versão.Respostas:
A partir daqui descarregue esta vídeo por isso temos o mesmo arquivo de vídeo para o teste. Certifique-se de ter esse arquivo mp4 no mesmo diretório do seu código Python. Em seguida, certifique-se de executar o interpretador python no mesmo diretório.
Então modifique o código, valha
waitKey
que está perdendo tempo também sem janela não consegue capturar os eventos do teclado. Também imprimimos osuccess
valor para ter certeza de que ele está lendo os quadros com sucesso.Como vai isso?
fonte
Read a new frame: False
Para estender esta questão (& resposta por @ user2700065) para casos ligeiramente diferentes, se alguém não quiser extrair todos os quadros, mas quiser extrair os quadros a cada um segundo. Portanto, um vídeo de 1 minuto fornecerá 60 quadros (imagens).
fonte
opencv-2.4.9
, então em vez decv2.CAP_PROP_POS_MSEC
usarcv2.cv.CAP_PROP_POS_MSEC
count = count + 5
cv2.imwrite()
no início do loop, já que você chamoucv2.imread()
antes do loop?Este é um ajuste da resposta anterior para python 3.x de @GShocked, eu postaria no comentário, mas não tenho reputação suficiente
fonte
Esta é uma função que irá converter a maioria dos formatos de vídeo para o número de quadros existentes no vídeo. Funciona
Python3
comOpenCV 3+
Suporta
.mts
arquivos normais como.mp4
e.avi
. Experimentado e testado em.mts
arquivos. Funciona como um encanto.fonte
Depois de muita pesquisa sobre como converter quadros em vídeo, criei esta função e espero que isso ajude. Exigimos o opencv para isso:
mude o valor de fps (frames por segundo), caminho da pasta de entrada e caminho da pasta de saída de acordo com suas próprias localizações locais
fonte
As respostas anteriores perderam o primeiro quadro. E será bom armazenar as imagens em uma pasta.
A propósito, você pode verificar o frame rat e por VLC. Vá para janelas -> informações de mídia -> detalhes do codec
fonte
cv.CAP_PROP_POS_AVI_RATIO
, mas não sei como. tnxEste código extrai frames do vídeo e salva os frames no formato .jpg
fonte
Estou usando Python por meio do software Spyder do Anaconda. Usando o código original listado na questão deste tópico por @Gshocked, o código não funciona (o python não lerá o arquivo mp4). Portanto, baixei o OpenCV 3.2 e copiei "opencv_ffmpeg320.dll" e "opencv_ffmpeg320_64.dll" da pasta "bin". Colei esses dois arquivos dll na pasta "Dlls" do Anaconda.
O Anaconda também tem uma pasta "pckgs" ... Copiei e colei toda a pasta "OpenCV 3.2" que baixei para a pasta "pckgs" do Anaconda.
Finalmente, o Anaconda possui uma pasta "Biblioteca" que possui uma subpasta "bin". Colei os arquivos "opencv_ffmpeg320.dll" e "opencv_ffmpeg320_64.dll" nessa pasta.
Depois de fechar e reiniciar o Spyder, o código funcionou. Não tenho certeza de qual dos três métodos funcionou, e estou com preguiça de voltar e descobrir. Mas funciona assim, saúde!
fonte
Esta função extrai imagens de vídeo com 1 fps, ALÉM DISSO, identifica o último quadro e também pára de ler:
fonte
O script a seguir irá extrair quadros a cada meio segundo de todos os vídeos na pasta. (Funciona em python 3.7)
fonte