Android 用の OpenCV (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) keypoints.convertTo() (2) キーポイントからベクトルを作成し、次に Point Vector pointList のベクトルを設定しようとしています。次に、フロー機能を呼び出すときに MatOfPoint2f に型キャストします (MatOfPoint2f) pointList (3) MatOfPoint2f を最初から作成しようとしています。これを行う方法がわかりません (4) MatOfPoint2f で fromArray メソッドを使用する - このメソッドが何をするのかわかりません。このメソッドのドキュメントは空白です。明らかな何かが欠けていますか?