2014-02-11 3 views
0

이미지의 윤곽선을 필터링하려고합니다. 내 코드에는 구문 오류가 없지만 프로그램을 실행할 때 많은 빨간색 텍스트가 표시됩니다. 나는 실패 지점을 cvInRangeS로 정했다. 당신은 만들기에 println 문에서도 이것을 볼 수 있습니다JavaCV cvInRangeS 오류

cvInRangeS(imghsv,minc,maxc,imgbin); 

그것에 그 도움이된다면 그게 문제가되지 않습니다 그래서 "thourgh3"

square.jpg 프로젝트 디렉토리에 있습니다. 이 코드가 빠르게 다가오고 내 로봇 팀과 경쟁하기 때문에

package opencv2; 


/*There are import statments here but for the sake of space I have left them out :D*/ 

public class OpenCV2 { 
    public static void main(String[] args) { 

     IplImage img1; 
     IplImage imghsv; 
     IplImage imgbin; 
     CvScalar minc = cvScalar(95,150,75,0), maxc = cvScalar(145,255,255,0); 
     CvSeq contour1 = new CvSeq(), contour2; 
     CvMemStorage storage = CvMemStorage.create(); 
     double areaMax = 1000, areaC = 0; 

     System.out.println("Through 1"); 

     img1 = cvLoadImage("square.jpg"); 
     imghsv = cvCreateImage(cvGetSize(img1),8,3); 
     imgbin = cvCreateImage(cvGetSize(img1),8,3); 
        System.out.println("Through 2"); 

     cvCvtColor(img1,imghsv,CV_BGR2HSV); 
        System.out.println("Through 3"); 

     cvInRangeS(imghsv,minc,maxc,imgbin); 
        System.out.println("Through 4"); 

     cvFindContours(imgbin,storage,contour1,Loader.sizeof(CvContour.class), 
       CV_RETR_LIST, CV_LINK_RUNS,cvPoint(0,0)); 

     contour2 = contour1; 

        System.out.println("Through 5"); 

     while(contour1 != null && !contour1.isNull()){ 
     areaC = cvContourArea(contour1,CV_WHOLE_SEQ,1); 

     if(areaC > areaMax){ 
     areaMax = areaC; 
     } 

     contour1 = contour1.h_next(); 
     }//end of while 

     while(contour2 != null && !contour2.isNull()){ 
     areaC = cvContourArea(contour2,CV_WHOLE_SEQ,1); 

        System.out.println("Through 6"); 

     if(areaC < areaMax){ 
     cvDrawContours(imgbin,contour2,CV_RGB(0,0,0),CV_RGB(0,0,0), 
       0,CV_FILLED,8,cvPoint(0,0)); 
      }//end of if 

        System.out.println("Through 7"); 
     contour2 = contour2.h_next(); 
     }//end of while2 

        System.out.println("Through 8"); 
     cvShowImage("Color",img1); 
     cvShowImage("CF",img1); 
     cvWaitKey(); 

     cvReleaseImage(img1); 
     cvReleaseImage(imghsv); 
     cvReleaseImage(imgbin); 
     cvReleaseMemStorage(storage); 

    }//end of main 
}//end of class 

빠른 응답 주시면 감사하겠습니다 다음과 같이

콘솔 returnes

Through 1 
Through 2 
Through 3 
OpenCV Error: Assertion failed (src1.size == dst.size && dst.type() == CV_8U) in  cvInRangeS, file ..\..\..\..\opencv\modules\core\src\arithm.cpp, line 2972 
Exception in thread "main" java.lang.RuntimeException: ..\..\..\..\opencv\modules\core\src\arithm.cpp:2972: error: (-215) src1.size == dst.size && dst.type() == CV_8U in function cvInRangeS 

at com.googlecode.javacv.cpp.opencv_core.cvInRangeS(Native Method) 
at opencv2.OpenCV2.main(OpenCV2.java:50) 
Java Result: 1 

전체 코드입니다!

고맙습니다. : D

답변

1

cvInRangeS()은 입력 이미지의 유형이 CV_8U 인 것으로 가정하므로 먼저 변환해야합니다.

... 
cvtColor(imghsv, grayscale, CV_BGR2GRAY); 
cvInRangeS(grayscale,minc,maxc,imgbin); 
... 
0

도움 주셔서 감사합니다. 문제는이 줄에 3 채널 이미지 "3"으로 설정했습니다. imgbin = cvCreateImage (cvGetSize (img1), 8,3);

이진 이미지 여야합니다. imgbin = cvCreateImage (cvGetSize (img1), 8,1);

+0

도움 주셔서 감사합니다. 당신의 의견은 저를 발견에 이르게했습니다! –