Python ile Kamera Kullanarak Hareket Algılama

Forum Üyesi
Katılım
27 Nisan 2025
Mesajlar
3
Reaksiyon puanı
6
Python'da OpenCV kütüphanesini kullanarak kamera ile hareket algılama sistemi oluşturabiliriz. İşte temel bir hareket algılama kodu:


Python:
import cv2
import numpy as np

# Kamera bağlantısını aç
cap = cv2.VideoCapture(0)  # 0 varsayılan kamera

# Önceki kareyi saklamak için
prev_frame = None

while True:
    # Kameradan kareyi oku
    ret, frame = cap.read()
    if not ret:
        break
    
    # Gri tonlamaya çevir
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # Blur uygula (gürültüyü azaltmak için)
    gray = cv2.GaussianBlur(gray, (21, 21), 0)
    
    # Önceki kare yoksa, şimdiki kareyi kaydet ve devam et
    if prev_frame is None:
        prev_frame = gray
        continue
    
    # Önceki kare ile şimdiki kare arasındaki farkı hesapla
    frame_diff = cv2.absdiff(prev_frame, gray)
    # Eşikleme uygula
    _, thresh = cv2.threshold(frame_diff, 25, 255, cv2.THRESH_BINARY)
    
    # Gürültüyü azaltmak için genişletme işlemi uygula
    thresh = cv2.dilate(thresh, None, iterations=2)
    
    # Konturları bul
    contours, _ = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # Hareket eden nesnelerin etrafına dikdörtgen çiz
    for contour in contours:
        if cv2.contourArea(contour) < 1000:  # Küçük konturları gözardı et
            continue
        
        (x, y, w, h) = cv2.boundingRect(contour)
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # Sonuçları göster
    cv2.imshow("Kamera", frame)
    cv2.imshow("Hareket Maskesi", thresh)
    
    # Önceki kareyi güncelle
    prev_frame = gray
    
    # Çıkış için 'q' tuşuna bas
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Kaynakları serbest bırak
cap.release()
cv2.destroyAllWindows()

Kod Açıklaması​

  1. Kamera Bağlantısı: cv2.VideoCapture(0) ile varsayılan kamera bağlantısı açılır.
  2. Görüntü İşleme:
    • Her kare gri tonlamaya çevrilir
    • Gürültüyü azaltmak için Gaussian blur uygulanır
  3. Hareket Algılama:
    • Mevcut kare ile önceki kare arasındaki fark hesaplanır
    • Belirli bir eşik değerinin üzerindeki farklar hareket olarak kabul edilir
  4. Kontur Bulma:
    • Hareket eden bölgelerin konturları bulunur
    • Küçük konturlar (gürültü) göz ardı edilir
    • Büyük konturların etrafına dikdörtgen çizilir
  5. Görüntüleme:
    • Orijinal kare ve hareket maskesi ayrı pencerelerde gösterilir
 
Üst