Camshift (Continuously Adaptive Mean Shift) Algoritması

Camshift (Continuously Adaptive Mean Shift) algoritması, OpenCV kütüphanesinde kullanılan bir nesne takip algoritmasıdır. Algoritma, ilk olarak Gary Bradsky tarafından yazılmıştır ve ilk olarak 1988 yılında yayınlanmıştır.

Camshift algoritması, Mean Shift algoritmasına benzer şekilde çalışır. İlk olarak, bir nesnenin başlangıç konumu belirlenir ve ardından nesnenin renk profili hesaplanır. Bu renk profili kullanılarak, nesnenin konumu güncellenir. Bu işlem tekrar edilir ve nesnenin konumu sürekli olarak güncellenir. Mean Shift algoritmasına göre daha hassas ve hızlıdır. Bu, algoritmanın nesnenin hızlı hareketlerini takip etme kabiliyeti sayesindedir. Ayrıca, Camshift algoritması, nesnenin boyutunu ve yönünü de takip edebilir.

OpenCV kütüphanesinde, Camshift algoritmasını kullanmak için cv2.CamShift() fonksiyonu kullanılır. Bu fonksiyon, nesnenin başlangıç konumu, rengi ve boyutu gibi parametreleri alır ve nesnenin son konumunu döndürür. Kısaca, Camshift algoritması OpenCV kütüphanesinde kullanılan hızlı ve hassas bir nesne takip algoritmasıdır. Bu algoritma, nesnenin hızlı hareketlerini, boyutunu ve yönünü takip edebilir ve OpenCV kütüphanesinde kullanımı kolaydır.

Camshift algoritmasını kullanarak nesne takibi yapmak için kullanılabilir. Bu örnekte, kullanıcının elle belirlediği bir başlangıç kutusu kullanılır ve algoritma bu kutudaki nesnenin konumunu takip edebilir.

Python Örneği

import cv2

# Video kaynağını aç
cap = cv2.VideoCapture(0)

# Başlangıç kutusunu belirle
ret, frame = cap.read()
r, h, c, w = cv2.selectROI("Select Object", frame, False, False)

# Başlangıç kutusu için renk profilini oluştur
track_window = (c, r, w, h)
roi = frame[r:r+h, c:c+w]
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv_roi, np.array((0., 60., 32.)), np.array((180., 255., 255.)))
roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0, 180])
cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)

# Camshift algoritmasını ayarla
term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)

while(True):
    ret, frame = cap.read()
    if ret == True:
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        dst = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
        ret, track_window = cv2.CamShift(dst, track_window, term_crit)
        pts = cv2.boxPoints(ret)
        pts = np.int0(pts)
        img2 = cv2.polylines(frame, [pts], True, (0, 0, 255), 2)
        cv2.imshow("Camshift", img2)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()


  1. import cv2 satırı OpenCV kütüphanesini projede kullanmamızı sağlar.
  2. cap = cv2.VideoCapture(0) satırı, sistemin kamerasını açar ve videoyu kaydetmek için kullanılır. 0 parametresi, sistemdeki ilk kamerayı kullanır.
  3. ret, frame = cap.read() satırı, kameradan ilk kareyi okur. ret değişkeni kare okuma işleminin başarılı olup olmadığını gösterir.
  4. r, h, c, w = cv2.selectROI("Select Object", frame, False, False) satırı, kullanıcının elle belirlediği başlangıç kutusunu alır. selectROI fonksiyonu, kullanıcının fare ile kutuyu seçmesini sağlar.
  5. track_window = (c, r, w, h) satırı, başlangıç kutusunun koordinatlarını kaydeder.
  6. roi = frame[r:r+h, c:c+w] satırı, başlangıç kutusunun içeriğini alır.
  7. hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV) satırı, başlangıç kutusunun içeriğini HSV renk uzayına dönüştürür.
  8. mask = cv2.inRange(hsv_roi, np.array((0., 60., 32.)), np.array((180., 255., 255.))) satırı, başlangıç kutusunun içeriğinde belirli renk aralıklarını maskeler.
  9. roi_hist = cv2.calcHist([hsv_roi], [0], mask, [180], [0, 180]) satırı, başlangıç kutusunun içeriğinde belirli renk aralıklarının histogramını oluşturur.
  10. cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX) satırı, histogramı normalize eder.
  11. term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1) satırı, Camshift algoritmasının durdurma kriterlerini belirler