1 – Stereo kameradan nasıl görüntü alınır?

Opencv’de stereo kameradan görüntü alırken normal video dosyasından görüntü alır gibi yada tek bir kameradan görüntü alırmış gibi alamıyoruz. Normalde bu işlem için read() komutunu kullanıyorduk fakat bu komut da grab ve retrieve komutlarının birleşimidir aslında. Hemen read komutunun dökümanına baktığımızda “Grabs, decodes and returns the next video frame.” Yan, “Yakala, decode et, sonraki video frame’i döndür anlamında. İki read komutunu ardı ardına çağırdığımızda iki yakalama işlemi arasında decode adımı olacak, ve bu da gelen sağ ve sol görüntü arasında gecikme yaşatacaktır. Bunun önüne geçmek için ilk başta iki kameradan görüntüyü grab komutuyla alıp ardından gelen görüntüleri işlem süresi grab’a göre daha uzun olan retrieve methoduyla decode edeceğiz.  Yani ilk başta yakalayıp dönüştürüp ardından diğer görüntüyü yakalama işlemine geçerken, şimdi iki görüntüyü de yakalayıp sonra ikisi için de decode işlemi gerçekleştireceğiz ve oluşan gecikmenin önünü almış olacağız.

Kameralardan gelen görüntüyü left ve right olarak iki değişkene atıyoruz. Şuan harici kamera bende olmadığı için kamera görüntülerini VideoCapture fonksiyonuyla 0 ve 1 parametrelerini kullanarak alacağım. Laptop gibi bi bilgisayarınız varsa 1 ve 2 parametrelerini kullanabilirsiniz.

import cv2

left = cv2.VideoCapture(0)
right = cv2.VideoCapture(1)

while(True):
    if not (left.grab() and right.grab()):
        print("No more frames")
        break

    _, leftFrame = left.retrieve()
    _, rightFrame = right.retrieve()

    cv2.imshow('left', leftFrame)
    cv2.imshow('right', rightFrame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

left.release()
right.release()
cv2.destroyAllWindows()