3

所以我正在尝试使用该calcCopticalFlowPyrLK方法,但它不断抛出断言失败:

OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0) 

checkVector 检查输入矩阵是否为 2 通道并且颜色深度为 CV_32F。我的输入是具有 4 个通道和 CV_8U 色深的 Mat。当我尝试转换它时,它每次都无法更改。我用了

Mat prevFrame; // The input Mat. Grabbed from CvCameraViewFrame. Converted to rgb

Mat prev = new Mat(rows,cols, CvType.CV_32F);
Imgproc.cvtColor(prevFrame, prev, Imgproc.COLOR_BGRA2GRAY);
prev.convertTo(prev, CvType.CV_32F);

但是当我检查之后的 prev 具有正确的深度(CV_32F)但只有 1 个元素通道时。我已经为此苦苦挣扎了几个小时,但我无法弄清楚问题出在哪里

4

1 回答 1

1

断言在 prevPtsMat 向量上失败,该向量是calcOpticalFlowPyrLK调用的第三个参数。您在这里定义的矩阵似乎是第一个参数,它应该是一个单通道图像,因为它已经是。 http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html

我想您正在为第三个参数使用点数组,您可能需要MatOfPoint2f()为点数组显式创建一个。我认为这已在: Android: Using calcOpticalFlowPyrLK with MatOfPoint2f

于 2014-03-20T07:16:41.837 回答