Beberapa hari lalu seorang pembaca bertanya soalan dalam kumpulan peminat:
Bagaimana untuk meningkatkan kejelasan dan kontras video dalam Python?
Saya belum meliputi aspek penggunaan Python untuk mengendalikan video sebelum ini, jadi saya minta maaf untuk memberitahu pembaca saya bahawa saya belum membuat liputan lagi.
Setelah memikirkannya selama dua hari yang lalu, saya merasakan bahawa saya harus menambah beberapa kandungan pada bahagian ini Di satu pihak, ia akan meningkatkan keluasan liputan saya, dan sebaliknya, ia boleh juga menjawab soalan untuk peminat.
Hari ini saya akan berkongsi operasi paling asas pengendalian video dalam Python, termasuk membaca dan memainkan video serta menyimpan video.
Untuk menangkap video, anda perlu mencipta objek VideoCapture. Hujahnya boleh menjadi indeks peranti atau nama fail video. Oleh itu, kita mempunyai dua cara untuk membaca video, iaitu membaca video dari kamera dan membaca video dari fail.
Untuk peranti dengan kamera, seperti komputer riba dengan kamera, kami boleh terus mengaktifkan kamera komputer dan membaca strim video kamera.
import cv2 as cv cap = cv.VideoCapture(0) if not cap.isOpened(): print("Cannot open camera") exit() while True: # 逐帧捕获 ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: break # 显示结果帧 cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break # 完成所有操作后,释放捕获器 cap.release() cv.destroyAllWindows()
Di sini saya menghantar parameter 0 kepada objek VideoCapture, yang mewakili indeks peranti Indeks peranti ialah nombor yang menentukan kamera. Biasanya kamera akan disambungkan (seperti dalam kes saya). Jadi saya hanya lulus 0. Anda boleh memilih kamera kedua dengan melepasi 1, dan seterusnya.
cap.isOpened() digunakan untuk menentukan sama ada video itu ditangkap.
cap.read() mengembalikan nilai Boolean (Benar/Salah). Ia akan menjadi Benar jika bingkai dibaca dengan betul. Jadi anda boleh menyemak penghujung video dengan menyemak nilai pulangan ini.
kaedah cv.imshow digunakan untuk memaparkan bingkai video. Prinsip memainkan video adalah memainkannya bingkai demi bingkai.
Pada akhirnya, jangan lupa untuk melepaskan tawanan melalui cap.release().
Jalankan kod ini dan anda akan melihat tetingkap pop timbul memainkan imej daripada kamera komputer anda dalam masa nyata.
Sama seperti menangkap daripada kamera, cuma tukar indeks kamera dengan nama fail video.
Selain itu, apabila memaparkan video, anda boleh mengawal kelajuan main balik video melalui cv.waitKey(). Jika tetapan terlalu kecil, video akan menjadi sangat pantas, bersamaan dengan main balik berkelajuan dua kali, jika ia terlalu besar, video akan menjadi sangat perlahan, bersamaan dengan main balik tertunda. Biasanya 25 milisaat adalah baik.
import cv2 as cv cap = cv.VideoCapture('video.mp4') while cap.isOpened(): ret, frame = cap.read() # 如果正确读取帧,ret为True if not ret: break cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break cap.release() cv.destroyAllWindows()
Jalankan kod ini dan anda akan melihat tetingkap pop timbul memainkan fail video yang anda pilih.
Baca video dari kamera, kita boleh simpan video ke setempat. Kami menangkap video dan memprosesnya bingkai demi bingkai Jika kami ingin menyimpan video ini, ia sangat mudah, hanya gunakan cv.VideoWriter().
cv.VideoWriter() mempunyai 5 parameter:
Mengenai perbandingan antara format FourCC dan video, saya telah menyenaraikan beberapa format biasa:
cv2.VideoWriter_fourcc('P','I','M','1 ' ) = MPEG-1 codec cv2.VideoWriter_fourcc('M','J','P','G') = motion-jpeg codec --> mp4v cv2.VideoWriter_fourcc('M', 'P', '4 ' , '2') = MPEG-4.2 codec cv2.VideoWriter_fourcc('D', 'I', 'V', '3') = MPEG-4.3 codec cv2.VideoWriter_fourcc('D', 'I', 'V ' , 'X') = MPEG-4 codec --> avi cv2.VideoWriter_fourcc('U', '2', '6', '3') = H263 codec cv2.VideoWriter_fourcc('I', '2', ' 6', '3') = H263I codec cv2.VideoWriter_fourcc('F', 'L', 'V', '1') = FLV1 codec
Kod untuk menyimpan video:
import cv2 as cv cap = cv.VideoCapture(0) # 定义编解码器并创建VideoWriter对象 fourcc = cv.VideoWriter_fourcc(*'MJPG') out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640,480)) while cap.isOpened(): ret, frame = cap.read() if not ret: break frame = cv.flip(frame, 1) # 写翻转的框架 out.write(frame) cv.imshow('frame', frame) if cv.waitKey(1) == ord('q'): break # 完成工作后释放所有内容 cap.release() out.release() cv.destroyAllWindows()
Jalankan kod ini, anda boleh mencari fail video output.mp4 dalam direktori kod.
Dalam kod di atas, jika anda ingin keluar dari operasi video, tekan sahaja q pada papan kekunci.
Di atas ialah apa yang saya akan perkenalkan hari ini. Ia agak mudah untuk menggunakan python-opencv untuk mengendalikan video. Sudah tentu, anda juga boleh melakukan beberapa pemprosesan pada video apabila membaca atau menyimpan video Kami akan memperkenalkan ini dalam artikel seterusnya.
Atas ialah kandungan terperinci Bagaimana untuk menangkap, memainkan dan menyimpan video kamera menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!