Отслеживание мультипельного объекта с использованием оптического потока pyrlk по результатам обнаружения haar
Я пытаюсь отслеживать несколько объектов (автомобилей) в видео с помощью оптического потока PyrLK из результата обнаружения haar, но проблема в том, что некоторое время обнаружение haar (объект) не появляется в кадрах ! Как я могу отслеживать объект, который обнаружение Хаара (объект) не появляется в нескольких кадрах ?? как я могу приблизить это место автоматически ,,,
Я пытаюсь найти объект с помощью оптического потока PyrLK ... но эта техника теряется, когда обнаружение Хаара (объекта) не появляется
Есть какие-нибудь предложения ??? пожалуйста.....
Зеленый Rect = результат обнаружения Haar, красная точка = углы от GoodFeaturestoTrack
video >> prev_frame; Rect roi = Rect(50, 180, 540, 240); prevROI=prev_frame(roi); cvtColor(prevROI, gray, CV_BGR2GRAY); gray.convertTo(prev_img, CV_8UC1); while(true) { video >> frameROI; Rect roi = Rect(50, 180, 540, 240); Mat ROI=frameROI(roi); cvtColor(ROI, gray, CV_BGR2GRAY); //=====> RGB to Grayscale gray.convertTo(imgROI, CV_8UC1); vector<Rect> cars; Casmobil.detectMultiScale(gray, cars, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING|CV_HAAR_SCALE_IMAGE, Size(0,0)); for (size_t i = 0; i < cars.size(); i++) { Rect square = cars[i]; areax = (cars[i].x + cars[i].width*0.5); areay = (cars[i].y + cars[i].height*0.5); Point cen_point = Point(areax ,areay); rectangle(ROI, square,CV_RGB(0,255,0),2,8,0); circle(ROI, cen_point, 3,CV_RGB(255, 0, 0),-2); } for (int i = 0; i < cars.size(); i++) { Rect square2 = cars[i]; cropcars = imgROI(square2); ROIOF = ROI(square); //prev_frame goodFeaturesToTrack(cropmobil, prevframe_corners,maxCorners, qualityLevel,minDistance,Mat(), blockSize,useHarrisDetector,k); calcOpticalFlowPyrLK(prev_img, imgROI, prevframe_corners, frame_corners, found, error, Size(win_size, win_size), maxlevel,termcrit); Rect box = boundingRect(frame_corners); rectangle(ROIOF, box, CV_RGB(0,255,255),2,8,0); Boxx = (box.x + box.width*0.5); boxy = (box.y + box.height*0.5); cen = Point(boxx, boxy); circle(ROIF, cen, 3, CV_RGB(0, 0, 255), -1); for( int j = 0; j < frame_corners.size(); j++ ) { circle(ROIOF, frame_corners[j], 2, CV_RGB(255, 0, 0), -1); circle(ROIOF, prevframe_corners[j], 2, CV_RGB(0, 0, 255), -1); line(ROIOF,frame_corners[j], cen, CV_RGB(0, 255, 0),2, 8, 0); } prev_img = imgROI.clone(); }
Что я уже пробовал:
Мне нужна помощь, как мне сделать так, чтобы когда результаты Хаара отсутствуют, но оптический поток все еще есть
Или если у вас есть обнаружение кода и отслеживание объекта с помощью haar и оптического потока, можете ли вы поделиться со мной (glebah13@gmail.com)
Спасибо за ваше внимание