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()
import cv2
satırı OpenCV kütüphanesini projede kullanmamızı sağlar.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.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.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.track_window = (c, r, w, h)
satırı, başlangıç kutusunun koordinatlarını kaydeder.roi = frame[r:r+h, c:c+w]
satırı, başlangıç kutusunun içeriğini alır.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.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.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.cv2.normalize(roi_hist, roi_hist, 0, 255, cv2.NORM_MINMAX)
satırı, histogramı normalize eder.term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)
satırı, Camshift algoritmasının durdurma kriterlerini belirler