Android - OpticalFlow: calcOpticalFlowPyrLK & goodFeaturesToTrack возвращает те же точки
Я работаю над приложением стабилизации видео для Android! У меня возникла проблема, связанная с функциями goodfeaturestotrack и calcOpticalFlowPyrLK, потому что конечный результат совпадает! Я погуглил каждый сайт по этому поводу, но я не смог решить это! Что не так с моим кодом?
mRgba1 = new Mat(height, width, CvType.CV_8UC4);
mRgba2 = new Mat(height, width, CvType.CV_8UC4);
mGray1 = new Mat(mRgba1.size(), CvType.CV_8UC1);
mGray2 = new Mat(mRgba2.size(), CvType.CV_8UC1);
mView = new Mat(height, width, CvType.CV_8UC4);
initial = new MatOfPoint();
status = new MatOfByte();
err = new MatOfFloat();
mask = new Mat(mRgba1.size(), CvType.CV_8UC1);
prevPts = new MatOfPoint2f();
nextPts = new MatOfPoint2f();
Imgproc.goodFeaturesToTrack(mGray1, initial, maxCorners, 0.01, 0.01);
initial.convertTo(prevPts, CvType.CV_32FC2);
Video.calcOpticalFlowPyrLK(mGray1, mGray2, prevPts, nextPts, status, err, winSize, 5, optical_flow_termination_criteria, 0, 1);
Тогда, когда я покажу им:
Point[] pointp = prevPts.toArray();
Point[] pointn = nextPts.toArray();
for (Point px : pointp)
{ Core.circle(mView, px, 15, circleColor); }
for (Point py : pointn)
{ Core.circle(mView, py, 5, line_color); }
Я получил 2 разных круга в одной позиции, и это не хорошо:(
1 ответ
Я считаю, что проблема в том, что видеокамера снова и снова пропускает одно и то же изображение. Вы пробовали клонировать коврики для видеозахвата! Еще одна вещь, которую стоит попробовать, у calcOpticalFlowPyrLK есть 3 различных способа вызова. я бы предложил использовать этот
Video.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts, status, err, winSize, maxLevel)
:D
TermCriteria termcrit = new TermCriteria(TermCriteria.MAX_ITER|TermCriteria.EPS,25,0.03);
Video.calcOpticalFlowPyrLK(temp3, temp2, prevPts, nextPts, status, err, winSize, 5);
//Video.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts, status, err)
//Video.calcOpticalFlowPyrLK(temp3, temp2, prevPts, nextPts, status, err, winSize, 5, termcrit, 0, 1);