Вопрос по – Найти контуры в JavaCV или OPENCV

4

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

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 contours = new CvSeq (iplGray); но я не понимаю почему. Любая полезная идея?

Скажите, что вы нашли решение? Если это так, пожалуйста, будьте любезны поделиться этим. Благодарност Gum Slashy

Ваш Ответ

2   ответа
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;
}
Можете ли вы объяснить, как идентифицировать многоугольники, используя вышеуказанный метод, особенно длины? SL_User
Скажите, этот код правильный? потому что метод cvRectangle () не имеет правильных параметров, не так ли? SL_User
0

аналогичный старому OpenCV 1.x C API (функции и классы с префиксом cv *).

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

Для людей, которые хотят использовать более новый синтаксис (похожий на API OpenCV C ++), вот фрагмент кода 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 документация

Похожие вопросы