2013-03-20 99 views
3

所以我想用calcCopticalFlowPyrLK方法,并不断抛出一个断言失败:cvtColor不OpenCV的正常工作为Java

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个元素通道。我一直在挣扎几个小时,我不知道问题是什么

回答

1

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

我想你使用的是第三个参数的点数组,你可能需要明确地为点数组创建一个MatOfPoint2f()。我认为这已被描述在: Android: Using calcOpticalFlowPyrLK with MatOfPoint2f

+2

刚才看到你在3月20日发布了这个“2013”​​。我以为你几个小时前发布了这个 – pkrskr 2014-03-20 07:42:54