Skip to main content

OpenCV'de Resim ve Video İşlemleri

OpenCV ile Video ve Resimlerin Okunması

Bu ders, OpenCV kullanarak video ve resim dosyalarının nasıl okunacağını ve işleneceğini kapsar. Bu temel, bilgisayar görüşü projelerinde sıklıkla gereklidir ve görüntü işleme becerilerinizin temelini oluşturur.

Önemli

Bu bölümde anlatılan yöntemler, OpenCV kütüphanesini kullanarak görsel verilerle çalışmanın temelini oluşturur.

Resimlerin Okunması

Resimleri okumak için OpenCV'nin imread fonksiyonunu kullanırız. Bu fonksiyon, resim dosyasının yolunu argüman olarak alır ve bir görüntü matrisi döndürür.

import cv2

# Resim dosyasını oku
image = cv2.imread('yol/dosya_adı.jpg')

# Resmi ekranda göster
cv2.imshow('Resim', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
tip

cv2.waitKey(0) komutu, herhangi bir tuşa basılana kadar pencerenin açık kalmasını sağlar. cv2.destroyAllWindows() ise tüm OpenCV pencerelerini kapatır.

Videoların Okunması

Videoları okumak için cv2.VideoCapture fonksiyonunu kullanırız. Bu, video dosyasından veya bir kamera aygıtından çerçeve çerçeve okuma imkanı tanır.

# Video dosyasını okumak için
cap = cv2.VideoCapture('yol/video_dosyası.mp4')

# Kamera kullanarak video okumak için (genellikle 0 varsayılan kamera)
# cap = cv2.VideoCapture(0)

# Videoyu çerçeve çerçeve oku
while True:
ret, frame = cap.read()

# Eğer çerçeve okunursa, göster
if ret:
cv2.imshow('Video', frame)

# 'q' tuşuna basılırsa döngüyü kır
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break

# Her şey bittiğinde serbest bırak ve pencereleri kapat
cap.release()
cv2.destroyAllWindows()
Dikkat

Kamera ile video okurken, cv2.VideoCapture fonksiyonuna geçirilen argüman kamera aygıtının indeksidir. Çoğu sistemde varsayılan kamera 0 olarak indekslenir.

Bu dersin sonunda, OpenCV ile basit görüntü ve video işleme tekniklerini öğrenmiş olacaksınız. Bu yetenekler, daha ileri görüntü işleme görevlerinin temelini oluşturacaktır.

Frame'lerin Yeniden Şekillenmesi ve Boyutlandırılması

Bu ders, OpenCV kullanarak görüntü ve video çerçevelerinin nasıl yeniden boyutlandırılacağını ve şekillendirileceğini kapsar. Bu işlemler, görüntü işleme algoritmalarının daha verimli çalışması için çoğu zaman gereklidir.

Çerçevelerin Boyutlandırılması

Çerçeveleri boyutlandırmak için OpenCV'nin resize fonksiyonunu kullanırız. Bu fonksiyon, orijinal çerçeve, hedef boyutlar ve isteğe bağlı olarak yeniden boyutlandırma algoritması olmak üzere birkaç parametre alır.

import cv2

# Orijinal görüntüyü yükle
image = cv2.imread('path/to/image.jpg')

# Görüntüyü yeni bir boyuta yeniden boyutlandır
resized_image = cv2.resize(image, (800, 600))

# Yeniden boyutlandırılmış görüntüyü göster
cv2.imshow('Resized Image', resized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
İpucu

Görüntüleri yeniden boyutlandırırken oranları korumak istiyorsanız, orijinal boyutları orantılı bir şekilde hesaplayabilir ve bu yeni boyutları resize fonksiyonuna iletebilirsiniz.

Çerçevelerin Yeniden Şekillendirilmesi

Bazen, bir görüntüyü veya video çerçevesini yeniden şekillendirmek (rescaling) ihtiyacı duyabilirsiniz. Bu, özellikle belirli bir çözünürlük oranını korumak istediğinizde önemlidir.

Görüntü boyutlarını orantılı bir şekilde değiştirmek için bir işlev yazabilirsiniz:

def rescale_frame(frame, scale=0.75):  # Varsayılan olarak %75'e boyutlandır
width = int(frame.shape[1] * scale)
height = int(frame.shape[0] * scale)
dimensions = (width, height)

return cv2.resize(frame, dimensions)

Bu fonksiyon, belirtilen ölçek faktörüne göre bir görüntünün boyutunu ayarlar. Görüntüyü yeniden boyutlandırmak için aşağıdaki gibi kullanabilirsiniz:

# Orijinal görüntüyü yükle
frame = cv2.imread('path/to/image.jpg')

# Görüntüyü yeniden boyutlandır
rescaled_frame = rescale_frame(frame, scale=0.5)

# Yeniden boyutlandırılmış görüntüyü göster
cv2.imshow('Rescaled Frame', rescaled_frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
Dikkat

Yeniden boyutlandırma ve şekillendirme işlemleri görüntü kalitesini etkileyebilir. Bu işlemleri yaparken görsel kalitenin nasıl etkilenebileceğini göz önünde bulundurun.

Bu işlevler, özellikle büyük görüntü kümeleriyle çalışırken veya belirli bir çıkış boyutu gereksinimi olduğunda kullanışlıdır. Görüntü boyutlandırma, bilgisayar görüşü uygulamalarında sıklıkla ihtiyaç duyulan bir adımdır.

Resimler Üzerinde Şekil ve Yazı İşlemleri

Bu ders, OpenCV kullanarak görüntülere çeşitli şekiller çizme ve metin ekleme işlemlerini kapsar. Bu işlemler, görüntü üzerinde görsel notlar eklemek veya belirli alanları vurgulamak için sıkça kullanılır.

Şekillerin Çizilmesi

OpenCV, çeşitli geometrik şekilleri çizmenize olanak tanır. Bu şekiller arasında çizgiler, dikdörtgenler, daireler ve çokgenler bulunur.

Çizgiler

Bir çizgi çizmek için line fonksiyonunu kullanırız:

import cv2

# Boş bir görüntü oluştur
image = cv2.imread('path/to/image.jpg')

# Çizgi çiz (başlangıç, bitiş, renk, kalınlık)
cv2.line(image, (0, 0), (150, 150), (255, 0, 0), 5)

# Sonucu göster
cv2.imshow('Line', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dikdörtgenler

Bir dikdörtgen çizmek için rectangle fonksiyonunu kullanırız:

# Dikdörtgen çiz (sol üst, sağ alt, renk, kalınlık)
cv2.rectangle(image, (10, 10), (100, 100), (0, 255, 0), 3)

Daireler

Bir daire çizmek için circle fonksiyonunu kullanırız:

# Daire çiz (merkez, yarıçap, renk, kalınlık)
cv2.circle(image, (100, 100), 55, (0, 0, 255), -1)
İpucu

Kalınlık parametresine -1 değeri verildiğinde, çizilen şekil içi dolu olarak çizilir.

Metin Ekleme

Görüntülere metin eklemek, kullanıcıya bilgi vermek veya görüntüdeki belirli bir nesneyi etiketlemek için yararlıdır. Metin eklemek için putText fonksiyonunu kullanırız:

# Metin ekle (metin, konum, font, ölçek, renk, kalınlık)
cv2.putText(image, 'OpenCV', (10, 500), cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 255, 255), 2)
Dikkat

Metin ve şekiller, görüntünün üzerine kalıcı olarak çizilir. Orjinal görüntüyü korumak istiyorsanız, işlemlerden önce bir kopyasını almayı unutmayın.

Bu teknikler, görüntülerin üzerine anlamlı bilgiler eklemenize ve görüntü işleme sırasında dikkatinizi çekmek istediğiniz alanları vurgulamanıza olanak tanır.