Jadi saya telah mengikuti tutorial ini tetapi sepertinya tidak melakukan apa-apa. Tidak ada apa-apa. Ini menunggu beberapa detik dan menutup program. Apa yang salah dengan kode ini?
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
Juga, di komentar dikatakan bahwa ini membatasi frame menjadi 1000? Mengapa?
EDIT: Saya mencoba melakukan success = True
dulu tetapi itu tidak membantu. Itu hanya membuat satu gambar yang berukuran 0 byte.
python
python-2.7
opencv
GShocked
sumber
sumber
success
?True
atauFalse
?print success
tempat.success
; jika salah maka itu berarti pembacaan video gagal karena beberapa alasan. Anda perlu sedikit bekerja dulu.brew install opencv --python27 --ffmpeg
jika Anda menggunakan versi Python yang berbeda, Anda perlu mengubahnya ke versi Anda.Jawaban:
Dari sini unduh video ini sehingga kami memiliki file video yang sama untuk pengujian. Pastikan untuk memiliki file mp4 di direktori yang sama dengan kode python Anda. Kemudian pastikan juga untuk menjalankan interpreter python dari direktori yang sama.
Kemudian ubah kodenya, selokan
waitKey
yang membuang-buang waktu juga tanpa jendela tidak dapat menangkap acara keyboard. Juga kami mencetaksuccess
nilai untuk memastikan itu membaca bingkai dengan sukses.Bagaimana hasilnya?
sumber
Read a new frame: False
Untuk memperluas pertanyaan ini (& jawaban oleh @ user2700065) untuk kasus yang sedikit berbeda, jika ada yang tidak ingin mengekstrak setiap frame tetapi ingin mengekstrak frame setiap satu detik. Jadi video 1 menit akan memberikan 60 frame (gambar).
sumber
opencv-2.4.9
, jadi alih-alihcv2.CAP_PROP_POS_MSEC
saya harus menggunakancv2.cv.CAP_PROP_POS_MSEC
count = count + 5
cv2.imwrite()
di awal loop karena Anda memanggilcv2.imread()
sebelum loop?Ini adalah tweak dari jawaban sebelumnya untuk python 3.x dari @GShocked, saya akan mempostingnya ke komentar, tetapi tidak memiliki reputasi yang cukup
sumber
Ini adalah Fungsi yang akan mengubah sebagian besar format video ke jumlah bingkai yang ada di video. Ini bekerja
Python3
denganOpenCV 3+
Ini mendukung
.mts
dan file normal seperti.mp4
dan.avi
. Dicoba dan Diuji pada.mts
file. Bekerja seperti Mantra.sumber
Setelah banyak penelitian tentang cara mengonversi bingkai ke video, saya telah membuat fungsi ini, semoga ini membantu. Kami membutuhkan opencv untuk ini:
ubah nilai fps (frame per detik), jalur folder input dan jalur folder output sesuai dengan lokasi lokal Anda sendiri
sumber
Jawaban sebelumnya kehilangan frame pertama. Dan akan menyenangkan untuk menyimpan gambar dalam sebuah folder.
Ngomong-ngomong, Anda bisa mengecek frame rat e oleh VLC. Buka windows -> informasi media -> detail codec
sumber
cv.CAP_PROP_POS_AVI_RATIO
, tetapi saya tidak tahu caranya. tnxKode ini mengekstrak bingkai dari video dan menyimpan bingkai dalam format .jpg
sumber
Saya menggunakan Python melalui perangkat lunak Spyder Anaconda. Menggunakan kode asli yang tercantum dalam pertanyaan thread ini oleh @Gshocked, kode tersebut tidak berfungsi (python tidak akan membaca file mp4). Jadi saya mengunduh OpenCV 3.2 dan menyalin "opencv_ffmpeg320.dll" dan "opencv_ffmpeg320_64.dll" dari folder "bin". Saya menempelkan kedua file dll ini ke folder "Dlls" Anaconda.
Anaconda juga memiliki folder "pckgs" ... Saya menyalin dan menempelkan seluruh folder "OpenCV 3.2" yang saya download ke folder "pckgs" Anaconda.
Terakhir, Anaconda memiliki folder "Library" yang memiliki subfolder "bin". Saya menempelkan file "opencv_ffmpeg320.dll" dan "opencv_ffmpeg320_64.dll" ke folder itu.
Setelah menutup dan memulai ulang Spyder, kode tersebut berfungsi. Saya tidak yakin mana dari ketiga metode tersebut yang berhasil, dan saya terlalu malas untuk kembali dan mencari tahu. Tapi berhasil, selamat!
sumber
Fungsi ini mengekstrak gambar dari video dengan 1 fps, SELAIN itu, ini mengidentifikasi bingkai terakhir dan juga berhenti membaca:
sumber
Skrip berikut akan mengekstrak frame setiap setengah detik dari semua video di folder. (Bekerja pada python 3.7)
sumber