java - Android-OpticalFlow : calcOpticalFlowPyrLK & goodFeaturesToTrack return same points

标签 java android opencv computer-vision opticalflow

我正在开发 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 个不同的圆圈,这不好 :(

最佳答案

我认为问题在于视频捕捉一遍又一遍地传递相同的图像。 您是否尝试克隆视频捕捉垫! 还可以尝试另一件事,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);

关于java - Android-OpticalFlow : calcOpticalFlowPyrLK & goodFeaturesToTrack return same points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234968/

相关文章:

java - 有一些方法可以为 spring 集成 dsl 流程生成图表吗?

java - 使用自定义 SSL 配置启动 WebLogic 服务器

android - 手机在 Android 上启动时如何启动我的应用程序?

java - Activity_main、菜单、action_setting 无法解析或不是字段

opencv - 为什么在Canny Edge Detection之后无法绘制线条?

java - 在 FXML Controller 类中找不到可注入(inject)字段

java - 如何使用 selenium webDriver 单击 anchor 标记

java - 在android中创建一个主要的抽象 View

opencv - 如何分类是单个数字还是多个数字

opencv - BFMatcher 和 FlannBasedMatcher 的区别