我正在研究Java OpenCV项目,我想找到形状的市长和短轴。我使用fitEllipse方法,但是Eclipse抛出以下错误:

OpenCV错误:cvFitEllipse2,文件........ \ opencv \ modules \ imgproc \ src \ shapedescr.cpp,第799行中输入数组的大小不正确(点数应> = 5)

大小后来的转换是1x1。为什么会这样?

List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(sourceImg, contours, new Mat(),Imgproc.RETR_LIST,Imgproc.CHAIN_APPROX_SIMPLE);

for(int i=0; i< contours.size();i++){
//Conversion between MatOfPoint to MatOfPoint2f
MatOfPoint2f temp=new MatOfPoint2f(contours.get(i).toArray());
RotatedRect elipse1=Imgproc.fitEllipse(temp);
}

最佳答案

在代码级别
您需要temp至少包含5个点才能调用Imgproc.fitEllipse(temp)
查看opencv's source here
您会看到cvFitEllipse2(由fitEllipse使用)检查最少5分。
在数学上
我不完全确定为什么在数学上必须至少具有5分才能做到这一点,但是当我阅读here时,4分并不能完全锁定椭圆。
另外,如果您对它的数学感兴趣,请也检查this(它也具有指向其他说明的内部链接)。

09-05 20:47