Hedef
Bu makalede maddeler halinde belirtilen hedeflere ulaşmak için python programlama dili ve OpenCV kütüphaneleri kullanılmıştır.
- codec ve FourCC nedir?
- Kameradan nasıl video çekilir?
- Dosyadan video oynatma nasıl yapılır?
- Video Döndürme nasıl yapılır?
- Kameradan çekilen videoyu nasıl kaydederiz?
Kullanılacak Fonksiyonlar
- cv.VideoCapture(*args)
- cv.flip(src, flipCode, dst)
- cv.VideoWriter(*args)
Codec ve FourCC Nedir?
OpenCV üzerinde videolarla çalışma yapabilmemiz için codec ve fourcc terimlerinin ne olduğunu bilmemiz gerekmektedir. Bu nedenle video işlemlerine ait örnekler verilmeden önce bu iki terimin kısaca tanımı aşağıda yapılmıştır.
Codec Nedir?
Codec kısaca kod çözücü demektir. Dijital ortamda video dosyalarını, görüntü dosyalarını, ses dosyalarını sıkıştırma ve yeniden açma işlemlerinde kullanılmaktadır.
Videolar yüzlerce görüntünün arka arkaya gösterilmesi ile oluşmaktadır. 720p 60 fps video kaydı alabilen bir kamera saniyede 1280×720 büyüklüğünde 60 adet resim çekerek bu resimleri arka arkaya oynatmaktadır. Dolayısıyla 1 dakikada 360 adet görüntü dosyası oluşacaktır. 10 dakika içinde 3600 görüntü dosyası olacağını düşünürsek dosya boyutu hayli büyüyecektir. Bu nedenle bu görüntüleri sıkıştırmak için birden fazla algoritma geliştirilmiştir. Bu algoritmalar sayesinde verilerimizi sıkıştırabiliriz fakat sıkıştırılan verileri çözebilen bir algoritmaya daha ihtiyacımız olacaktır. Çünkü sıkıştırılan veriler tekrar anlamlı bir veri olarak okunabilsin. İşte bu sıkıştırılan verileri tekrar okumaya yarayan algoritmalar codec olarak isimlendirilmektedir. Yüzlerce codec paketi vardır. Bunlardan bazıları şu şekildedir: mjpg, mpeg, mpg4, xvid, mpeg-4, divx… Codec paketlerinin tamamına buradan ulaşabilirsiniz.
FourCC Nedir?
FourCC (Four character code) medya dosyalarında kullanılan codec’ler için pixel formatlarını, renk formatlarını, sıkıştırma formatlarını standart bir biçimde tanımlamlar. Bu tanımlamayı sadece 4 karakter kullanarak yaptığı için 4CC ya da FourCC adını almıştır. Tanımlamaları sadece ASCII tablosu üzerindeki karakterleri kullanarak yapmaktadır. Buraya tıklayarak video codec’lerini inceleyebilir veya indirebilirsiniz.
Kameradan Video Çekme
Kameradan görüntü alma ve video çekme işlemlerinde veya video dosyaları ile yapılacak işlemler için cv.VideoCapture(*args)
sınıfı kullanılmaktadır. Aşağıda kameradan video çekimi yapabilmemiz için bir örnek verilmiştir. Bu örneği inceledikten sonra cv.VideoCapture(*args)
sınıfına ait nesnelerin açıklamaları yapılacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# Date: 10.03.2019 # Author: Hakan Ceran # Content: OpenCV - Kameradan Video Çekme # Gerekli kütüphanelerin projeye dahil edilmesi import cv2 as cv import numpy as np from matplotlib import pyplot as plt #========================================================================================== # Dosyadan video okumak için #cap = cv.VideoCapture('TomandJerry.mp4') # IP Kamera bağlantısı için #cap = cv.VideoCapture('http://192.168.1.105:8080/video') # Kamera bağlantısı için (Cihazınıza bağlı diğer kameralar için 0-1-2-3 deneyebilirsiniz.) cap = cv.VideoCapture(0) #========================================================================================== # Kamera bağlantısını kontrol et. if not cap.isOpened(): print("Kamera bağlantısı başarısız!") exit() while True: # Kameradan görüntü al ret, frame = cap.read() # Görüntü başarıyla alındı mı kontrol et. if not ret: print("Bağlantıdan görüntü alınamadı!") break # Gri formatta okumak için gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # Okunan görüntüyü ekranda göster. cv.imshow('frame',frame) # q tuşuna basıldığında çık. if cv.waitKey(1) == ord('q'): break # İşin bittikten sonra her şeyi serbest bırak. cap.release() cv.destroyAllWindows() |
cap=cv.VideoCapture(*args)
VideoCapture sınıfını oluşturur.cap.isOpened()
VideoCapture sınıfını açmayı dener. Hata olup olmadığını kontrol eder. 1 veya 0 ya da True veya False değeri döndürür.cap.release()
VideoCapture sınıfını kapatır.
Dosyadan Video Oynatma
Sistem üzerinde kayıtlı video dosyasını oynatmak için aşağıda bir örnek program verilmiştir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# Date: 10.03.2019 # Author: Hakan Ceran # Content: OpenCV - Dosyadan Video Okuma # Gerekli kütüphanelerin projeye dahil edilmesi import cv2 as cv import numpy as np from matplotlib import pyplot as plt #========================================================================================== # Dosyadan video okumak için cap = cv.VideoCapture('TomandJerry.mp4') # IP Kamera bağlantısı için #cap = cv.VideoCapture('http://192.168.1.105:8080/video') # Kamera bağlantısı için (Cihazınıza bağlı diğer kameralar için 0-1-2-3 deneyebilirsiniz.) #cap = cv.VideoCapture(0) #========================================================================================== # Dosyadan Görüntü okuma başarılı olduğu sürece while döngüsü çalışsın. while(cap.isOpened()): # Videodan bir görüntü al. ret, frame = cap.read() # Gri formatta okumak için gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # Okunan görüntüyü ekranda göster. cv.imshow('frame',frame) # q tuşuna basıldığında çık. if cv.waitKey(1) & 0xFF == ord('q'): break # İşin bittikten sonra her şeyi serbest bırak. cap.release() cv.destroyAllWindows() |
Kameradan Çekilen Videoyu Kaydetme
Görüntüleri kaydetme işlemini sadece cv.imwrite() fonksiyonunu kullanarak yapabiliyorduk. Videoları kaydetmek için ek olarak codec ve fourcc kullanmamız gerekmektedir. Bkz: bu terimler hakkında bilgi yukarıda verilmiştir.
Kameradan nasıl video çekilir ve kaydedilir örnek bir uygulamayla gözlemleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# Date: 10.03.2019 # Author: Hakan Ceran # Content: OpenCV - Kameradan çekilen videoyu kaydetme # Gerekli kütüphanelerin projeye dahil edilmesi import cv2 as cv import numpy as np from matplotlib import pyplot as plt #========================================================================================== # Dosyadan video okumak için #cap = cv.VideoCapture('TomandJerry.mp4') # IP Kamera bağlantısı için #cap = cv.VideoCapture('http://192.168.1.105:8080/video') # Kamera bağlantısı için (Cihazınıza bağlı diğer kameralar için 0-1-2-3 deneyebilirsiniz.) cap = cv.VideoCapture(0) #========================================================================================== # codec tanımlama ve VideoWriter nesnesi oluşturma bilgi için bkz: https://www.fourcc.org/codecs.php fourcc = cv.VideoWriter_fourcc(*'XVID') # Yukarıdaki işlemi aşağıdaki gibi de yapabiliriz. #fourcc = cv.VideoWriter_fourcc('X','V','I','D') # Kaydedilecek video dosyasının adı, uzantısı, konumu, saniyedeki çerçeve sayısı ve çözünürlüğü out = cv.VideoWriter('output.avi',fourcc, 60.0, (640,480)) # Görüntü alma başarılı olduğu süre boyunca kaydetmeye devam et. while(cap.isOpened()): # Videodan görüntü oku ve geri döndür. ret, frame = cap.read() # Görüntü okuma başarılı ise if ret==True: # cv.flip(src, flipCode, dst) 2 boyutlu diziyi dikey yatay veya her iki eksen etrafında döndürür. # 0 => dikey döndürme # 1 => yatay döndürme # 2 => hem yatay hem dikey döndürme frame = cv.flip(frame,1,dst=None) # Döndürülen görüntüyü video dosyasına yaz. out.write(frame) # Görüntüyü ekranda göster. cv.imshow('frame',frame) # q tuşuna basıldığında çık. if cv.waitKey(1) & 0xFF == ord('q'): break else: break # İşin bittikten sonra her şeyi serbest bırak. cap.release() out.release() cv.destroyAllWindows() |
Bir Yorum Bırakın
Yorumları Göster