Какие шаги для извлечения контуров / форм из видео глубины? - PullRequest
1 голос
/ 02 января 2012

Я пытаюсь создать гистограмму видео глубины (сначала преобразуем в оттенки серого), чтобы применить пороговое значение для сохранения только самых высоких значений, а затем выполнить некоторое расширение, чтобы извлечь контуры.Очевидно, я застрял, и , кроме того, я не знаю, является ли то, что я думаю, правильным способом извлечения контуров из видео глубины.

В следующем коде я застрялточка применения порога.Я думаю, что я применяю это неправильно.Как правильно применить порог в этой ситуации для получения черно-белого изображения?

Любые предложения или ссылки на учебники будут великолепны !!!

Большое спасибо!

    int bins = 256;
    int hsize[] = {bins};

    //max and min value of the histogram
    float max_value = 0, min_value = 0;

    float value;
    int normalized;

    //ranges - grayscale 0 to 256
    float xranges[] = { 0, 256 };
    float* ranges[] = { xranges };

    //image is the actual source from input depth video
    gray = cvCreateImage( cvGetSize(image), 8, 1 );
    cvCvtColor( image, gray, CV_BGR2GRAY );

    cvNamedWindow("original",1);
    cvNamedWindow("gray",1);
    cvNamedWindow("histogram",1);
    cvNamedWindow("black & white",1);

    IplImage* planes[] = { gray };

    //get the histogram and some info about it
    hist = cvCreateHist( 1, hsize, CV_HIST_ARRAY, ranges,1);
    cvCalcHist( planes, hist, 0, NULL);
    cvGetMinMaxHistValue( hist, &min_value, &max_value);
    printf("min: %f, max: %f\n", min_value, max_value);

    imgHistogram = cvCreateImage(cvSize(bins, image->height),8,1);
    cvRectangle(imgHistogram, cvPoint(0,0), cvPoint(256,image->height), CV_RGB(255,255,255),-1);

     //I think that here i have messed up things :( Any suggestions ???
    bw_img = cvCreateImage(cvGetSize(imgHistogram), IPL_DEPTH_8U, 1);
    cvThreshold(imgHistogram, bw_img, 150, 255, CV_THRESH_BINARY);

    //draw the histogram
    for(int i=0; i < bins; i++){
            value = cvQueryHistValue_1D( hist, i);
            normalized = cvRound(value*image->height/max_value);
            cvLine(imgHistogram,cvPoint(i,image->height), cvPoint(i,image->height-normalized), CV_RGB(0,0,0));
    }

    //show the image results
    cvShowImage( "original", image );
    cvShowImage( "gray", gray );
    cvShowImage( "histogram", imgHistogram );
    cvShowImage( "balck & white", bw_img);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...