Video bilan ishlash
Maqsadlar
• Videoni o'qishni, videoni namoyish qilishni va videoni saqlashni o'rganing.
• Kameradan suratga olishni va uni namoyish qilishni o'rganing.
• Siz ushbu funktsiyalarni bilib olasiz: cv2.VideoCapture (), cv2.VideoWriter ()
Kameradan videoga olish
Ko'pincha, biz kamera bilan jonli efirni suratga olishimiz kerak. OpenCV bunga juda oddiy interfeysni ta'minlaydi. Videokameradan videoni yozib olaylik (men tizza kompyuterimning ichki veb-kamerasidan foydalanyapman), uni kulrang rangga aylantiring va namoyish eting. Boshlash uchun oddiy vazifa.
Videoni suratga olish uchun siz Video Capture ob'ektini yaratishingiz kerak. Qurilma ko'rsatkichi yoki videofilm nomi uning dalili bo'lishi mumkin. Qurilma indeksi - bu qaysi kamerani belgilash uchun faqat raqam. Odatda bitta kamera ulanadi (mening holatimda bo'lgani kabi). Shunday qilib, men shunchaki 0 (yoki -1) dan o'taman. Ikkinchi kamerani 1 va boshqalarni bosib tanlashingiz mumkin. Shundan so'ng, siz kadrlarni freymga tushirishingiz mumkin. Ammo oxirida, qo'lga olishni ozod qilishni unutmang.
cap.read () mantiqiylikni qaytaradi (True / Noto'g'ri). Agar ramka to'g'ri o'qilsa, u to'g'ri bo'ladi. Shunday qilib, siz ushbu qiymatni tekshirish orqali videoning oxirini tekshirishingiz mumkin.
Ba'zan, kepka ushlashni boshlamagan bo'lishi mumkin. Bunday holda, ushbu kod xatoni ko'rsatadi. Siz uni modecap.isOpened () yordamida boshlangan yoki qilinmaganligini tekshirishingiz mumkin. Agar rost bo'lsa, yaxshi. Aks holda uni cc.open () yordamida oching.
Shuningdek, siz ushbu videoning ba'zi xususiyatlariga cap.get (propId) usuli bilan kirishingiz mumkin, bunda propId 0 dan 18 gacha bo'lgan raqam. Har bir raqamdan olingan video-video-video (video-video videosi va videoni ko'rish mumkin) va pulni to'lash kerak bo'lgan joyda: Mulk egasi. Ushbu qiymatlarning ba'zilarini cap.set (propId, value) yordamida o'zgartirish mumkin. Qiymat - bu kerakli yangi qiymat.
Masalan, men cap.get (3) va cap.get (4) bo'yicha ramka kengligi va balandligini tekshirishim mumkin. Sukut bo'yicha menga 640x480 beradi. AmmoIwanttomodifyitto320x240. Justuseret = cap.set (3,320) va shuncha = cap.set (4,240).
Eslatma: Agar sizda xato bo'lsa, boshqa biron bir kamera dasturidan foydalanib kamera ishlamayotganiga ishonch hosil qiling (Linux-dagi kabi).
Fayldan video o’zgartirish
Videokamera orqali oddiy videofilmni o'chirish. Tarkibni o'ynatishda, cv2.waitKey () uchun mos vaqtdan foydalaning. Agar u juda oz bo'lsa, video juda tez bo'ladi va agar u juda baland bo'lsa, video sekin bo'ladi (mayli, videolarni sekin harakatda namoyish qilishingiz mumkin). Oddiy holatlarda 25 millisekundlar yaxshi bo'ladi.
Eslatma: to'g'ri o'zgartirishlar amalga oshirilganiga ishonch hosil qiling. Ba'zan bu video-rasmni asosan ffmpeg / gstreamer-ning noto'g'ri o'rnatilishi tufayli amalga oshiriladi.
Videoni saqlash
Shunday qilib, biz videoga olamiz, uni kadrma-kadra qayta ishlaymiz va ushbu videoni saqlamoqchimiz. Rasmlar uchun bu juda oddiy, shunchaki cv2.imwrite () ni ishlating. Bu erda biroz ko'proq ish talab etiladi.
Bu safar biz VideoWriter ob'ektini yaratamiz. Biz chiqadigan fayl nomini (masalan: output.avi) belgilashimiz kerak. Keyin biz FourCC kodini ko'rsatamiz (keyingi paragrafda tafsilotlar). Keyin sekundiga freymlar soni va kadrlar hajmini o'tkazish kerak. Va oxirgisi Rang-ag. Agar bu haqiqat bo'lsa, kodlovchi rang ramkasini kutadi, aks holda u kulrang rang bilan ishlanadi.
FourCC - bu video kodekni ko'rsatishda ishlatiladigan 4 baytli kod. Mavjud kodlar ro'yxati bilan to'rt kunlik manzilda tanishish mumkin. Bu platformaga bog'liq. Kodeklarga amal qilish men uchun juda foydali.
• Fedorada: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID afzalroqdir. MJPG yuqori o'lchamdagi videolarni chiqaradi. X264 juda kichik o'lchamdagi video beradi)
• Windows-da: DIVX (sinab ko'rilishi va qo'shilishi kerak)
• OSX-da: (Men OSX-ga kirish huquqiga ega emasman. Buni kimdir amalga oshirishi mumkinmi?)
FourCC kodi cv2.VideoWriter_fourcc ('M', 'J', 'P', 'G') yoki cv2 sifatida uzatiladi. MJPG uchun videoWriter_fourcc (* 'MJPG). Kameradan olingan kodni quyida, har bir kvadratni vertikal yo'nalishda ip shaklida saqlang va uni saqlang.
Do'stlaringiz bilan baham: |