Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV4Android从MatOfKeyPoint到MatOfPoint2f的转换_Android_Opencv_Tracking_Opticalflow - Fatal编程技术网

OpenCV4Android从MatOfKeyPoint到MatOfPoint2f的转换

OpenCV4Android从MatOfKeyPoint到MatOfPoint2f的转换,android,opencv,tracking,opticalflow,Android,Opencv,Tracking,Opticalflow,我正在尝试将OpenCV用于Android OpenCV 2.4.3 我正在写一个跟踪关键点的程序。我正在尝试使用FeatureDetector检测关键点,然后使用Video.calcOpticalFlowPyrLK 跟踪他们。 让我困惑的问题是FeatureDetector函数返回一个MatOfKeyPoint,而calcOpticalFlowPyrLK获取一个MatOfPoint2f 请注意,MatOfKeyPoint与MatOfPoint不同,从MatOfPoint到MatOfPont2f

我正在尝试将OpenCV用于Android OpenCV 2.4.3 我正在写一个跟踪关键点的程序。我正在尝试使用FeatureDetector检测关键点,然后使用Video.calcOpticalFlowPyrLK 跟踪他们。 让我困惑的问题是FeatureDetector函数返回一个MatOfKeyPoint,而calcOpticalFlowPyrLK获取一个MatOfPoint2f

请注意,MatOfKeyPoint与MatOfPoint不同,从MatOfPoint到MatOfPont2f的转换非常简单

以下是我目前的代码:

//Feature detector for LKT flow estimation
FeatureDetector cvFeatureDetector;
//Vector of keypoints
MatOfKeyPoint keypoints;

...
...

//intitialize detector
cvFeatureDetector = FeatureDetector.create(FeatureDetector.GFTT);

keypoints = new MatOfKeyPoint();

...
...

//mPrevImgMat is a grayscale image - previous frame
//mCurrentImgMat is a grayscale image - current frame

//Run feature detector in previous image
cvFeatureDetector.detect(mPrevImgMat, keypoints);

MatOfPoint2f keypointsFound = new MatOfPoint2f();
MatOfByte keypointsStatus = new MatOfByte();
MatOfFloat err = new MatOfFloat();
Size winSize = new Size(25,25);
int maxLevel = 3;

//Optical flow to find keypoints in current image
Video.calcOpticalFlowPyrLK(mPrevImgMat, mCurrentImgMat, keypoints,
            keypointsFound, keypointsStatus, err, winSize, maxLevel);

//Obviously "keypoints" in the line above does not work. How does one covert
//keypoints to MatOfPoint2f?
到目前为止,我尝试过但未成功的事情: 1关键点。转换到 2从关键点创建向量,然后尝试填充点向量pointList的向量。然后在调用流函数时将类型转换为MatOfPoint2f MatOfPoint2f点列表 3尝试从头开始填充MatOfPoint2f。我想不出怎么做
4在MatOfPoint2f中使用fromArray方法-不确定此方法的作用。此方法的文档为空。我是否遗漏了一些明显的东西?

回答我自己的问题。。。我在另一个论坛上得到了答案。下面是该讨论的链接

您看到了吗?建议的两个选项似乎不起作用:1使用新的MatOfPoint2f MatOfKeyPoint_数组。toArray构造函数MatoFPoint2Object[]未定义2使用MatOfKeyPoint对象上的convertTo:MatOfPoint2f pointListMat=new MatOfPoint2f;cvFeatureDetector.DetectMProvimgmat,关键点;keypoints.convertTopointListMat,CvType.CV_32FC2;这会编译,但语句Video.calcOpticalFlowPyrLKmPrevImgMat、mCurrentImgMat、pointListMat、keypointsFound、keypointsStatus、err、winSize、maxLevel;导致OpenCV断言错误prevPtsMat size>=0@LeonidosI导致崩溃,我正在询问从MatOfKeyPoint到MatOfPoint2f的转换。请注意,这与MatOfPoint到MatOfPoint2f不同。MatOfKeyPoint和MatOfPoint是两个不同的类@列奥尼多斯