Trolltech Home | Qt-interest Home | Recent Threads | All Threads | Author | Date
All threads index page 5

Qt-interest Archive, January 2007
OpenCV and Qt


Message 1 in thread

hi
posting for a friend of mine.

She got some code in openCV and integrated it in her Qt Application. 
This code is showing up images in an openCV Window. when closing the 
window the cvDestroyWindow("mywindow") function is called. But after 
that the Qt application refuses to quit, any idea where it may come from?

Thanks

Elise

--
 [ signature omitted ] 

Message 2 in thread

Hi

Could you please send a copy of the offending code


On 25/01/07, Elise Taillant <elise.taillant@xxxxxxxxxxxx> wrote:
>
> hi
> posting for a friend of mine.
>
> She got some code in openCV and integrated it in her Qt Application.
> This code is showing up images in an openCV Window. when closing the
> window the cvDestroyWindow("mywindow") function is called. But after
> that the Qt application refuses to quit, any idea where it may come from?
>
> Thanks
>
> Elise
>
> --
> To unsubscribe - send a mail to qt-interest-request@xxxxxxxxxxxxx with
> "unsubscribe" in the subject or the body.
> List archive and information: http://lists.trolltech.com/qt-interest/
>
>


-- 
 [ signature omitted ] 

Message 3 in thread

Here's her code, I'm not a openCV expert the only thing I noticed is 
that an image is not released
startingWindow::startingWindow(Qt::WFlags f):QMainWindow(0,f){        
//constructor

    setupUi(this);
  
    connect(pushButtonTrackingOnline, SIGNAL(clicked()), this, 
SLOT(TrackingONline()));


}

int startingWindow::TrackingONline() 
{
    int win_size = 10;
    const int MAX_COUNT = 500;
    CvPoint2D32f* points[2] = {0,0}, *swap_points;
    char* status = 0;
    int count = 0;
    int need_to_init = 0;
    int night_mode = 0;
    int flags = 0;

    image = 0; grey = 0; prev_grey = 0; pyramid = 0; prev_pyramid = 0;


int argc = 1;
    char** argv = new char*[argc];
   argv[argc-1] = new char[100];

   argv[0]="./lkdemo";
    printf("argc: %d, argc=%s ", argc, argv[argc-1]);

 CvCapture* capture = 0;
   
    if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && 
isdigit(argv[1][0])))
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
    else if( argc == 2 )
        capture = cvCaptureFromAVI( argv[1] );

    if( !capture )
    {
        fprintf(stderr,"Could not initialize capturing...\n");
        return -1;
    }

    /* print a welcome message, and the OpenCV version */
    printf ("Welcome to lkdemo, using OpenCV version %s (%d.%d.%d)\n",
        CV_VERSION,
        CV_MAJOR_VERSION, CV_MINOR_VERSION, CV_SUBMINOR_VERSION);

    printf( "Hot keys: \n"
            "\tESC - quit the program\n"
            "\tr - auto-initialize tracking\n"
            "\tc - delete all the points\n"
            "\tn - switch the \"night\" mode on/off\n"
            "To add/remove a feature point click it\n" );

    cvNamedWindow( "LkDemo", 0 );
    cvSetMouseCallback( "LkDemo", on_mouse, 0 );

    for(;;)
    {
        IplImage* frame = 0;
        int i, k, c;

        frame = cvQueryFrame( capture );
        if( !frame )
            break;

        if( !image )
        {
            /* allocate all the buffers */
            image = cvCreateImage( cvGetSize(frame), 8, 3 );
            image->origin = frame->origin;
            grey = cvCreateImage( cvGetSize(frame), 8, 1 );
            prev_grey = cvCreateImage( cvGetSize(frame), 8, 1 );
            pyramid = cvCreateImage( cvGetSize(frame), 8, 1 );
            prev_pyramid = cvCreateImage( cvGetSize(frame), 8, 1 );
            points[0] = 
(CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0]));
            points[1] = 
(CvPoint2D32f*)cvAlloc(MAX_COUNT*sizeof(points[0][0]));
            status = (char*)cvAlloc(MAX_COUNT);
            flags = 0;
        }

        cvCopy( frame, image, 0 );
        cvCvtColor( image, grey, CV_BGR2GRAY );

        if( night_mode )
            cvZero( image );
       
        if( need_to_init )
        {
            /* automatic initialization */
            IplImage* eig = cvCreateImage( cvGetSize(grey), 32, 1 );
            IplImage* temp = cvCreateImage( cvGetSize(grey), 32, 1 );
            double quality = 0.01;
            double min_distance = 10;

            count = MAX_COUNT;
            cvGoodFeaturesToTrack( grey, eig, temp, points[1], &count,
                                   quality, min_distance, 0, 3, 0, 0.04 );
            cvFindCornerSubPix( grey, points[1], count,
                cvSize(win_size,win_size), cvSize(-1,-1),
                cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));
            cvReleaseImage( &eig );
            cvReleaseImage( &temp );

            add_remove_pt = 0;
        }
        else if( count > 0 )
        {
            cvCalcOpticalFlowPyrLK( prev_grey, grey, prev_pyramid, pyramid,
                points[0], points[1], count, cvSize(win_size,win_size), 
3, status, 0,
                
cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03), flags );
            flags |= CV_LKFLOW_PYR_A_READY;
            for( i = k = 0; i < count; i++ )
            {
                if( add_remove_pt )
                {
                    double dx = pt.x - points[1][i].x;
                    double dy = pt.y - points[1][i].y;

                    if( dx*dx + dy*dy <= 25 )
                    {
                        add_remove_pt = 0;
                        continue;
                    }
                }
               
                if( !status[i] )
                    continue;
               
                points[1][k++] = points[1][i];
                cvCircle( image, cvPointFrom32f(points[1][i]), 3, 
CV_RGB(0,255,0), -1, 8,0);
            }
            count = k;
        }

        if( add_remove_pt && count < MAX_COUNT )
        {
            points[1][count++] = cvPointTo32f(pt);
            cvFindCornerSubPix( grey, points[1] + count - 1, 1,
                cvSize(win_size,win_size), cvSize(-1,-1),
                cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));
            add_remove_pt = 0;
        }

        CV_SWAP( prev_grey, grey, swap_temp );
        CV_SWAP( prev_pyramid, pyramid, swap_temp );
        CV_SWAP( points[0], points[1], swap_points );
        need_to_init = 0;
        cvShowImage( "LkDemo", image );

        c = cvWaitKey(10);
        if( (char)c == 27 )
            break;
        switch( (char) c )
        {
        case 'r':
            need_to_init = 1;
            break;
        case 'c':
            count = 0;
            break;
        case 'n':
            night_mode ^= 1;
            break;
        default:
            ;
        }
    }

    cvReleaseCapture( &capture );
    cvDestroyWindow("LkDemo");

    return 0;

}



John Dean wrote:

> Hi
>  
> Could you please send a copy of the offending code
>
>  
> On 25/01/07, *Elise Taillant* <elise.taillant@xxxxxxxxxxxx 
> <mailto:elise.taillant@xxxxxxxxxxxx>> wrote:
>
>     hi
>     posting for a friend of mine.
>
>     She got some code in openCV and integrated it in her Qt Application.
>     This code is showing up images in an openCV Window. when closing the
>     window the cvDestroyWindow("mywindow") function is called. But after
>     that the Qt application refuses to quit, any idea where it may
>     come from?
>
>     Thanks
>
>     Elise
>
>     --
>     To unsubscribe - send a mail to qt-interest-request@xxxxxxxxxxxxx
>     <mailto:qt-interest-request@xxxxxxxxxxxxx> with "unsubscribe" in
>     the subject or the body.
>     List archive and information: http://lists.trolltech.com/qt-interest/
>
>
>
>
> -- 
> Best Regards
> John Dean 


-- 
 [ signature omitted ] 

Message 4 in thread

On 1/25/07, Elise Taillant <elise.taillant@xxxxxxxxxxxx> wrote:
> hi
> posting for a friend of mine.
>
> She got some code in openCV and integrated it in her Qt Application.
> This code is showing up images in an openCV Window. when closing the
> window the cvDestroyWindow("mywindow") function is called. But after
> that the Qt application refuses to quit, any idea where it may come from?

I'm afraid I don't have an answer, but I have experienced this same
problem. The odd part is that it happens only on Windows: my
Qt4+OpenCV application quits just fine on Linux and Mac OS X.

I'll let you know if I do come across anything in the future.

-- 
 [ signature omitted ]