所以我正在尝试使用calcCopticalFlowPyrLK
方法并且它一直在抛出一个断言失败:
OpenCV Error: Assertion failed ((npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0)
checkVector检查输入矩阵是否为2通道,颜色深度为CV_32F。我的输入是一个有4个通道的Mat,颜色深度为CV_8U。当我尝试转换它时,它不会每次都改变。我用了
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个元素通道。几个小时以来我一直在努力,我无法弄清楚问题是什么
答案 0 :(得分:1)
断言已在prevPtsMat向量上失败,该向量是calcOpticalFlowPyrLK
调用的第三个参数。看来你在这里定义的矩阵是第一个参数,应该是单个通道图像,因为它已经是。
http://docs.opencv.org/modules/video/doc/motion_analysis_and_object_tracking.html
我想你正在为第三个参数使用一个点数组,你可能需要为points数组显式创建一个MatOfPoint2f()
。我认为这已在以下描述:
Android: Using calcOpticalFlowPyrLK with MatOfPoint2f