#Python v3, OpenCV v3.4.2 import cv2 import numpy as np videoCapture = cv2.VideoCapture("video.mp4") ret, frame = videoCapture.read() rows, cols = frame.shape[:2] ''' Video dosyası üzerine Mean Shift için bir alan belirlenir. Bu koordinatlar ağırlıklı ortalaması belirlenecek olan dörtgen alanıdır. ''' #w ve h boyutlandırmasını değiştirerek sonuçları gözlemleyebilirsiniz w = 200 h = 300 col = int((cols - w) / 2) row = int((rows - h) / 2) shiftWindow = (col, row, w, h) ''' Şimdi görüntü üzerindeki parlaklığı, renk dağılımlarını dengelemek için bir maskeleme alanı oluşturalım ve bu alan üzerinde histogram eşitleme yapalım ''' roi = frame[row:row + h, col:col + w] roiHsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV) lowLimit = np.array((0., 60., 32.)) highLimit = np.array((180., 255., 255.)) mask = cv2.inRange(roiHsv, lowLimit, highLimit) roiHist = cv2.calcHist([roiHsv], [0], mask, [180], [0, 180]) cv2.normalize(roiHist, roiHist, 0, 255, cv2.NORM_MINMAX) ''' Bu parametre / durdurma ölçütü algoritmanın kendi içerisinde kaydırma/hesaplama işlemini kaç defa yapacağını belirlemektedir. ''' terminationCriteria = (cv2.TERM_CRITERIA_COUNT | cv2.TERM_CRITERIA_EPS , 10, 1) while True: ret , frame = videoCapture.read() ''' video içerisinde öncelikli HSV renk uzayı üzerinde histogram alıp histogram back projection yapacağız ve tüm görüntü üzerinde istediğimiz yerin segmentlerini bulacağız. ''' frameHsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) backprojectedFrame = cv2.calcBackProject([frameHsv], [0], roiHist, [0, 180], 1) # karanlıkta kalan alanları maskeleyelim mask = cv2.inRange(frameHsv, lowLimit, highLimit) backprojectedFrame &= mask # mean shift algoritmasını başlatalım ret, shiftWindow = cv2.meanShift(backprojectedFrame, shiftWindow, terminationCriteria) #Col, row artık mean shift ile elde edilen alandır col, row = shiftWindow[:2] #Görüntü üzerinde tespit edilen alanı çizelim frame = cv2.rectangle(frame, (col, row), (col + w, row + h), (255,255,0), 4) cv2.imshow('Agirlikli Ortalama Oteleme - Mean Shift', frame) k = cv2.waitKey(60) & 0xff videoCapture.release() cv2.destroyAllshiftWindows()