OpenCV Android Плохие результаты с отслеживанием распредвала
Я пытаюсь реализовать приложение для отслеживания объектов для Android, используя метод camshift. До сих пор мне удалось реализовать метод camshift и запустить его на моем планшете Android. К сожалению, он не работает должным образом... Когда я запускаю приложение, происходит доступ к камере устройства, и часть изображения будет выбрана в качестве объекта отслеживания. Гистограмма объекта вычисляется с использованием Imgproc.calcHist
функция.
После этого каждый раз, когда камера дает кадр Imgproc.calcBackProject
используется на изображении с камеры и с помощью Imgproc.calcBackProject
Функция вычисляет новое местоположение объекта. К сожалению, вместо отслеживания выбранного объекта, отслеживание смещается в верхнем левом углу экрана и остается там. Вот соответствующий код:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
//http://docs.opencv.org/3.1.0/db/df8/tutorial_py_meanshift.html#gsc.tab=0
//take first frame of the video
mCamera = inputFrame.rgba();
if(objectTaken == false){
// ich erstelle einen Beispielframe
trackingFrame = new Rect(mCamera.cols()/4,mCamera.rows()/4,600,500);
System.out.println("SIZZEEE: "+trackingFrame.size().toString());
System.out.println("Position: "+trackingFrame.x +" / "+ trackingFrame.y);
object = mCamera.submat(trackingFrame.x, trackingFrame.x+trackingFrame.width, trackingFrame.y, trackingFrame.y+trackingFrame.height);
hsvObject = new Mat();
Imgproc.cvtColor(object, hsvObject, Imgproc.COLOR_BGR2HSV);
lHSV = Arrays.asList(hsvObject);
//MatOfInt mChannels = new MatOfInt(0, 1);
mChannels = new MatOfInt(0);
histogram = new Mat();
histSize = new MatOfInt(180);
ranges=new MatOfFloat(0,180);
Imgproc.calcHist(lHSV, mChannels, new Mat(), histogram , histSize , ranges);
//Core.normalize(histogram, histogram, 0, 255, Core.NORM_MINMAX, -1, new Mat());
Core.normalize(histogram, histogram, 0, 255, Core.NORM_MINMAX);
//return mCamera;
objectTaken= true;
}
//set up the ROI for tracking
// grab the ROI for the bounding box and convert it to the HSV color space
//object = new Mat(mCamera,trackingFrame);
backproj = new Mat();
Imgproc.calcBackProject(lHSV, mChannels, histogram, backproj, ranges, 1);
//box = Video.CamShift(backproj, trackingFrame, new TermCriteria(TermCriteria.MAX_ITER|TermCriteria.EPS, 50, 0.001));
box = Video.CamShift(backproj, trackingFrame, new TermCriteria( TermCriteria.EPS | TermCriteria.COUNT, 10, 1 ));
trackingFrame = box.boundingRect();
pt1 =new Point(trackingFrame.x,trackingFrame.y);
pt2 =new Point(trackingFrame.x+trackingFrame.width,trackingFrame.y+trackingFrame.height);
RED = new Scalar(255,0,0);
Imgproc.rectangle(mCamera, pt1, pt2, RED);
return mCamera;
}
Кто-нибудь знает, как заставить работать трекинг? Я видел видео распредвала, которое выглядело очень многообещающим, моим приложением далеко не так хорошо, как те:(