Перейти к содержимому
Compvision.ru
Sencor

Построение карты глубины по двум изображениям

Recommended Posts

Добрый день! Стоит задача построить карту глубины по двум изображениям, но ничего не выходит. В программировании новичок. Не подскажете в чем может быть проблема? Нужна ли при данной задаче калибровка, если изображения загружаются из файла? И зачем?

Вот код моей программы:

int main(int argc, char **argv) {
    IplImage *Limage = 0, *Rimage = 0, *Lgray = 0, *Rgray = 0, *dstr = 0;
    Limage = cvLoadImage("leftImg.jpg", 0);
    if (Limage == NULL)
    {
        fprintf(stderr, "ERROR: Could not load left image %s\n");
        return 1;
    }
    
    Rimage = cvLoadImage("rightImg.jpg", 0);
    if (Rimage == NULL)
    {
        fprintf(stderr, "ERROR: Could not load right image %s\n");
        return 1;
    }

    Lgray = cvCreateImage(cvGetSize(Limage), Limage->depth, 1);
    Rgray = cvCreateImage(cvGetSize(Rimage), Rimage->depth, 1);
    cvConvertImage(Limage, Lgray, CV_BGR2GRAY);
    cvConvertImage(Rimage, Rgray, CV_BGR2GRAY);
    CvMat *Stereo = cvCreateMat(Limage->height, Limage->width, CV_16S);
    if (Stereo == NULL)
    {
        fprintf(stderr, "ERROR: Could not create depth map %s\n");
        return 1;
    }
    CvStereoBMState* state = cvCreateStereoBMState();
    if (state == NULL)
    {
        fprintf(stderr, "ERROR: Could not create CvStereoBMState\n");
        return 1;
    }
    state->SADWindowSize = 23;
    state->numberOfDisparities = 96;
    state->preFilterSize =25;
    state->preFilterCap = 63;
    state->minDisparity = 0;
    state->textureThreshold = 20;
    state->uniquenessRatio = 10;
    state->speckleWindowSize = 25;
    state->speckleRange = 8;
    state->disp12MaxDiff = 1;
    cvFindStereoCorrespondenceBM(Lgray, Rgray, Stereo, state);
    cvNamedWindow("cvHoughCircles", 1);
    cvShowImage("cvHoughCircles", Stereo);

    cvNamedWindow("left", CV_WINDOW_AUTOSIZE);
    cvNamedWindow("right", CV_WINDOW_AUTOSIZE);
    cvShowImage("left", Lgray);
    cvShowImage("right", Rgray);
    cvWaitKey(0);
    cvReleaseImage(&Limage);
    cvReleaseImage(&Rimage);
    cvReleaseImage(&Lgray);
    cvReleaseImage(&Rgray);
    cvDestroyAllWindows();
    return 0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×