OpenCV Nedir? sorusuna geçmeden önce bilgisayarla görü hakkında bilgi edinelim:
Bilgisayarla Görü Nedir?
Bilgisayarla görü, görüntülerin ve videoların nasıl depolandıklarını ve onlardan nasıl veri alabileceğimizi anladığımız bir süreçtir. Bilgisayarla Görme, Yapay Zeka için temeldir ve çoğunlukla kullanılır. Computer-Vision, sürücüsüz arabalarda, robotlarda ve fotoğraf düzeltme uygulamalarında önemli bir rol oynar. Derin öğrenme ve makine öğrenimi yöntemlerini kullanarak nesneleri tanıma, sınıflandırma ve içerik analizi gibi görevleri otomatikleştirir.
OpenCV Nedir?
Video analizi, görüntü işleme gibi bilgisayarla görü uygulamaları için çok faydalı olan açık kaynak kodlu bir kütüphanedir. OpenCV, C++ ile yazılmıştır ve 2.500’den fazla optimize edilmiş algoritmaya sahiptir. Sıfırdan oluşturmak istemediğimiz bilgisayar vizyonu uygulamaları oluşturduğumuzda, gerçek dünya sorunlarına odaklanmaya başlamak için bu kitaplığı kullanabiliriz. Günümüzde bu kütüphaneyi kullanan Google, Amazon, Microsoft ve Toyota gibi birçok firma bulunmaktadır. Birçok araştırmacı ve geliştirici katkıda bulunur. Windows, Ubuntu ve MacOS gibi herhangi bir işletim sistemine kolayca kullanılabilir.

OpenCV Nasıl Kurulur?
Öncelikle bu kütüphaneyi çalıştırmak için aygıtınıza Python kurulu olması gerekiyor.
Linux işletim sistemine sahip bir bilgisayarda terminale bu kodu girerek indirebilirsiniz:
sudo apt install python3-opencv
MacOS işletim sistemine sahip bilgisayarda kurulum yapmak için:
Öncelikle homebrew ile ile cmake indirmemiz gerekiyor:
brew install cmake
Ardından buradan open source kısmındaki dosyaları indirmemiz gerekiyor. İsterseniz doğrudan GitHub üzerinden de gerekli dosyaları çekebilirsiniz:
cd ~/<calisma_alani>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
Basit Kullanım Örnekleri
Görüntü Okuma
variable= cv2.imread(‘görüntü dosya yolu’)
Örnek kullanımı:
img = cv2.imread('devreyakan.jpg')
cv2.imshow('OutputImage', img)
Görüntü Yazma
variable= cv2.imwrite(‘görüntü dosya yolu’)
Örnek kullanımı:
img = cv2.imread('devreyakan')
cv2.imshow('Orjinal görüntü', img)
Görüntü Bilgilerini Alma
Yükseklik ve genişlik piksel değerleri gibi bir görüntünün şekil değerini sağlar.
img = cv2.imread('devreyakan.jpg')
Artık yazdırma yöntemini kullanarak görüntü şeklini yazdırabilirsiniz:
print(img.shape)
(320, 240, 3)
print("Yükseklik değeri : ", img.shape[0])
Yükseklik değeri: 320
print("Genişlik değeri : ", img.shape[1])
Genişlik değeri: 240
Görüntü Döndürme
Mevcut kütüphaneyi kullanarak görüntüleri kolayca döndürebiliriz.
img = cv2.imread("devreyakan.jpg")
height, width = img.shape[: 2]
rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 70, .5)
rotated_image = cv2.warpAffine(img, rotation_matrix, (width, height))
cv2.imshow('Döndürülmüş görüntü', rotated_image)
cv2.imshow('Ham görüntü', img)
Görüntü Dönüştürme
cv2.transpose() işlevini kullanarak bir görüntüyü doğrudan 90 derecede döndürmek için devrik yöntemini kullanabiliriz.
Görüntü Çözünürlüğü ve İşlem Hızı Optimizasyonu Notu
Görüntü işleme hızı, primitif görüştüğü kadar basit değildir. Kamera kaynağından gelen 1920×1080 RGB görüntü (~6MB/frame @ 24-bit) işlenmesi O(n²) karmaşıklığına yaklaşan histogram equalization veya edge detection (Canny, Sobel) işlemleri 30fps’de yapmaya kalkarsan 180MB/saniye bant genişliği gerekir. Raspberry Pi 4 (USB kamerası, 100Mbps sınırı), 640×480 çözünürlüğün üstüne çıkamaz; 1280×720 denenmesi halinde frame drop %40’ı aşar.
Pratik optimizasyon yapı:
- Görüntü boyutlandır (resize) – OpenCV cv2.resize(), nearest-neighbor (hızlı) vs. bilinear (kaliteli) seçenekleri sunarken, genelde 320×240’dan başlamak uygun;
- Renk uzayı dönüştürümü – RGB → HSV, Grayscale gibi işlemler lüzumsuz ise atla (ileri işlem hızını 3-5x artırır);
- Parallelization – OpenCV/OpenCL entegrasyon (GPU backend), CUDA desteği (NVIDIA jetson Nano’daki), veya threading (Python multiprocessing). Gerçek zamanlı işlem (video stream, robot görüşü) söz konusu ise 10-15fps sınırı altında çalışmak tavsiye edilir – 30fps hedefi daha kompleks işlere kalmış olsun.
Eğitim modelleri (YOLO, SSD) entegrasyonunda, model çıkışı postprocessing (bounding box çerçeveleri, metin taşıma) OpenCV ile yapılırken, işlem + render süresi toplam frame zamanını %50 üzerine çıkarabilir. Uygulamada optimizasyon 40-60%’lik hız kazancı sağlar; iyi yapılandırılmış çok-thread pipeline ~2-3x’lik performans artışı mümkündür.
img = cv2.imread('photo.jpg')
rotated_image = cv2.transpose(img)
cv2.imshow('Döndürülmüş görüntü', rotated_image)
cv2.imshow('Ham görüntü', img)
Video Çekimi
OpenCV, cv2.VideoCapture() olan videoyu okuma işlevine sahiptir. İşlev parametresindeki 0 geçişini kullanarak web kameramıza erişebiliriz. CCTV görüntülerini yakalamak istiyorsanız, video analizi için gerçekten yararlı olan işlev parametresinde RTSP url’sini kullanmalısınız.
video = cv2.VideoCapture(0)
check, frame = video.read()
Görüntü Kırpma
Görüntüyü kırpmak istiyorsanız, aşağıdaki kodu kullanarak OpenCV’de bunu kolayca yapabilirsiniz.
img = cv2.imread("photo.jpg")
height, width = img.shape[: 2]
start_row, start_col = int(height * .15), int(width * .15)
end_row, end_col = int(height * .65), int(width * .65)
cropped = img[start_row: end_row, start_col: end_col]
cv2.imshow('ham görüntü', img)
cv2.imshow('kırpılmış görüntü', cropped)
Görüntü Bulandırma
img = cv2.imread("photo.jpg")
cv2.imshow('ham görüntü', img)
cv2.waitKey(0)
kernel = np.ones((7, 7), np.float32) / 49
blurred = cv2.filter2D(img, -1, kernel)
cv2.imshow('bulanık görüntü', blurred)
Görüntü Piramidi
img = cv2.imread("devreyakan.jpg")
smaller = cv2.pyrDown(img)
larger = cv2.pyrUp(img)
cv2.imshow('original image', img)
cv2.imshow('smaller image', smaller)
cv2.imshow('larger image', larger)
Kenar Tespiti
canny = cv2.Canny(img, 20, 170)
cv2.imshow('tespit edilen', canny)
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
