2012-05-19 4 views
4

У меня проблема, но я не знаю, что! У меня есть следующий код, и когда я его отладки, отладчик останавливается вНайти контуры в JavaCV или OPENCV

IplImage iplGray = cvCreateImage(cvGetSize(iplUltima), 8, 1); 
CvMemStorage g_storage = null; 
CvSeq contours = new CvSeq(iplGray); 

opencv_imgproc.cvCvtColor(iplUltima, iplGray, opencv_imgproc.CV_BGR2GRAY); 
opencv_imgproc.cvThreshold(iplGray, iplGray, 100, 255, opencv_imgproc.CV_THRESH_BINARY); 

//HERE, the next line: 
opencv_imgproc.cvFindContours(iplGray, g_storage, contours, CV_C, CV_C, CV_C); 
cvZero(iplGray); 
if(contours != null){ 
    opencv_core.cvDrawContours(iplGray, contours, CvScalar.ONE, CvScalar.ONE, CV_C, CV_C, CV_C);    
} 
cvShowImage("Contours", iplGray); 

Я думаю, что это связано с CvSeq контурами = новый CvSeq (iplGray); но я не понимаю, почему. Любая полезная идея?

+0

Hay вы пришли на какое-то решение? Если да, будьте любезны поделиться им. Спасибо –

ответ

4

Для обнаружения контуров, я использовал этот метод. Он выполнен хорошо.

public static IplImage detectObjects(IplImage srcImage){ 

    IplImage resultImage = cvCloneImage(srcImage); 

    CvMemStorage mem = CvMemStorage.create(); 
    CvSeq contours = new CvSeq(); 
    CvSeq ptr = new CvSeq(); 

    cvFindContours(srcImage, mem, contours, Loader.sizeof(CvContour.class) , CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0)); 

    CvRect boundbox; 

    for (ptr = contours; ptr != null; ptr = ptr.h_next()) { 
     boundbox = cvBoundingRect(ptr, 0); 

      cvRectangle(resultImage , cvPoint(boundbox.x(), boundbox.y()), 
       cvPoint(boundbox.x() + boundbox.width(), boundbox.y() + boundbox.height()), 
       cvScalar(0, 255, 0, 0), 1, 0, 0); 
    } 

    return resultImage; 
} 
+0

Пожалуйста, вы можете объяснить, как идентифицировать формы многоугольника, используя вышеупомянутый метод, особенно длины? –

+0

Хей - этот код правильный ?? потому что метод cvRectangle() не имеет правильных параметров, не так ли? –

0

примеры по умолчанию и другой ответ здесь используется синтаксис, который похож на старый OpenCV 1.x C API (функция и классы с приставкой сорта *).

OpenCV представил новый API C++ в OpenCV 2.x, который намного проще и понятнее. JavaCV также добавил этот синтаксис в своих последних версиях.

Для тех, кто хочет использовать новую синтаксис (по аналогии с OpenCV C++ API), вот JavaCV фрагмент кода для обнаружения контура - (использует JavaCV 1.3.2)

Mat img = imread("/path/to/image.jpg",CV_LOAD_IMAGE_GRAYSCALE); 

MatVector result = new MatVector(); // MatVector is a JavaCV list of Mats 

findContours(img, result, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE); 

// The contours are now available in "result" 

// You can access them using result.get(index), check the docs linked below for more info 

MatVector documentation

Смежные вопросы