从深度视频中提取轮廓/形状的步骤是什么?

时间:2012-01-02 13:39:43

标签: image-processing opencv computer-vision

我正在尝试创建深度视频的直方图(首先转换为灰度),以便应用阈值以仅保留最高值,然后进行一些扩张以提取轮廓。显然我被卡住了,除了我不知道我在想什么是从深度视频中提取轮廓的正确方法。

在下面的代码中,我陷入了应用阈值的困境。我认为我以错误的方式应用它。在这种情况下应用阈值以获得黑白图像是正确的吗?

教程的任何建议或链接都​​会很棒!!!

非常感谢!

    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);

0 个答案:

没有答案