Rumah >pembangunan bahagian belakang >Tutorial Python >Pengaturcaraan Python: Tangkap, main semula dan simpan video menggunakan kamera

Pengaturcaraan Python: Tangkap, main semula dan simpan video menggunakan kamera

WBOY
WBOYke hadapan
2023-04-24 12:43:111983semak imbas

如何用 Python 捕获、播放和保存摄像头视频

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.

Membaca 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.

Baca video daripada kamera

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.

Mainkan video daripada fail

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.

Simpan video

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:

  • Parameter 1: Nama fail output, contohnya: output.mp4.
  • Parameter 2: Kod FourCC, FourCC ialah kod 4-bait yang digunakan untuk menentukan codec video.
  • Parameter 3: Bilangan kadar bingkai.
  • Parameter 4: Saiz bingkai.
  • Parameter 5: Warna bendera. Jika Benar, keluaran warna biasa, sebaliknya output imej kelabu.

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 dan anda akan menemui fail video output.mp4 dalam direktori kod.

Dalam kod di atas, jika anda ingin keluar dari operasi video, hanya tekan q pada papan kekunci.

Ringkasan

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 Pengaturcaraan Python: Tangkap, main semula dan simpan video menggunakan kamera. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam