cvtColor在OpenCV for Java中无法正常工作

时间:2013-03-20 20:14:39

标签: java android opencv

所以我正在尝试使用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个元素通道。几个小时以来我一直在努力,我无法弄清楚问题是什么

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