2013-08-25 3 views
0

Eclipse + opencv 2.4.6 + java api에서 작업 중입니다.OpenCV 오류 : 알 수없는 함수에서 어설 션 실패 (ptnum> 3), 파일 (Java + opencv 2.4.6)

지금 나는이 컴파일 오류가 있습니다

OpenCV Error: Assertion failed (ptnum > 3) in unknown function, file ..\..\..\src\opencv\modules\imgproc\src\contours.cpp, line 1969 Exception in thread "main" CvException [org.opencv.core.CvException: ..\..\..\src\opencv\modules\imgproc\src\contours.cpp:1969: error: (-215) ptnum > 3 ] 

at org.opencv.imgproc.Imgproc.convexityDefects_0(Native Method) 
at org.opencv.imgproc.Imgproc.convexityDefects(Imgproc.java:3170) 

부분 코드입니다 : 당신은 날

 List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); 
    Mat hierarchy = new Mat(); 
    Imgproc.findContours(imgframe,contours , hierarchy,Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE,new Point(0,0)); 

       for(int i=0;i<contours.size();i++) { 

       Imgproc.drawContours(imgframe, contours,i,new Scalar(255,0,255),2,8,hierarchy,0,new Point()); 
       MatOfInt hull_=new MatOfInt(); 

       MatOfInt4 convexityDefects=new MatOfInt4(); 
       Imgproc.convexHull(contours.get(0), hull_); 
       Imgproc.convexityDefects(contours.get(0), hull_, convexityDefects); 

       } 

도와 드릴까요? 감사의

+0

그것은 단지 추측하지만 난에 문제가 볼록 선체에있는 점의 수에 달려있다 생각 : 쉽게 for 루프에 if를 사용하여 확인할 수 있습니다. 가능한'convexityDefect '를 사용하려면 적어도 3 포인트가 있어야합니다. 확인하기에 충분히 쉬워야합니다 ... – Mahm00d

+0

Mahmm00d 와우! 해결됨, hull_.width()> = 3인지 확인하십시오! 고마워요! :) – user2715082

+0

다행스럽게도 도움이 될 수 있습니다 :). 나는 대답으로 게시하는 편이 낫다고 생각한다. – Mahm00d

답변

0

나는 문제가 당신의 볼록 선체에있는 포인트의 수에 있다고 생각합니다. 가능하면 convexityDefect()을 사용하려면 3 점 이상을 가져야합니다.

if(hull_.rows() >= 3){ 
    Imgproc.convexityDefects(contours.get(0), hull_, convexityDefects); 
} 
+0

잘못된 코드를 게시했습니다 : 이것은 'hull_.size(). height> = 4' – user2715082

+0

입니다.'.rows()'가 그 일을 할 것이라고 생각합니다. 또한, 그것은 단지 3 점과 함께 작동하지 않을 것이라고 확신합니까? 나는 지금 그것을 시험 할 수 없다. – Mahm00d

관련 문제