¿Encontrar el casco convexo de un objeto en opencv?

He escrito esto basado en el tutorial.aquí pero no puedo obtener el casco convexo de la imagen (estoy usando una imagen de mano similar a la que se muestra en el tutorial). Obtengo la salida de la fuente y los bordes, pero la salida de "Dibujos" que debe dibujar el contorno y las líneas convexas del casco no muestra nada dibujado y en su lugar es completamente negra. ¿Alguna idea de por qué esto podría ser?

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>

int main(int argc,char **argv)
{
    cvNamedWindow( "Source", 1 );
    cvNamedWindow( "edges window", 1 );
    cvNamedWindow( "Drawings", 1 );

    IplImage* src = cvLoadImage( "img.jpg", 0 );
    IplImage* edges = cvCreateImage( cvGetSize(src), 8, 1 );

    // Finding edges
    cvThreshold( src, edges, 150, 255, CV_THRESH_BINARY );

    CvMemStorage* storage = cvCreateMemStorage();
    CvSeq* first_contour = NULL;

    int Nc = cvFindContours(
        edges,
        storage,
        &first_contour,
        sizeof(CvContour),
        CV_RETR_LIST );

    // Finding convex Hull
    CvMemStorage* hull_storage = cvCreateMemStorage();
    CvSeq* retHulls = NULL;

    for(CvSeq* i = first_contour; i != 0; i = i->h_next){
    // note h_next is next sequence.
    retHulls = cvConvexHull2(first_contour,hull_storage,CV_CLOCKWISE,1);

    }

    // drawing contours and hull
    IplImage* draw = cvCreateImage(cvGetSize(edges), 8, 3 );

    for(CvSeq* i = first_contour; i != 0; i = i->h_next){
        cvDrawContours(draw,first_contour,cvScalar(255,0,0,0),cvScalar(255,0,0,0),0,1,8);
        cvDrawContours(draw,retHulls,cvScalar(255,0,0,0),cvScalar(255,0,0,0),0,1,8);

    }

    cvShowImage( "Source", src );
    cvShowImage( "edges window", edges );
    cvShowImage( "Drawings", draw );
    cvWaitKey();

    cvDestroyAllWindows();

    cvReleaseImage( &src );
    cvReleaseImage( &edges );
    cvReleaseImage( &draw );

    return 0;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta