1

当应用程序继续运行时,如何释放相机。它仍然处于状态。这是代码。不知道怎么释放

#include <cv.h>
#include <highgui.h>

main( int argc, char* argv[] ) {
    int i=1;
    CvCapture* capture = NULL;
    capture = cvCreateCameraCapture( 0 );
    IplImage *frames = cvQueryFrame(capture);


    while(1) {
        if (i==20)
        cvReleaseCapture ( &capture );

        char c = cvWaitKey(33);
        if( c == 27 ) break;
        i++;
    }
    return 0;
}
4

1 回答 1

1

你的代码并不完全清楚,所以我希望我理解正确,但我认为你想要的是更像这样的东西......

#include <cv.h>
#include <highgui.h>

int main( int argc, char* argv[] ) 
{
    int i=1;
    CvCapture* capture = NULL;
    capture = cvCreateCameraCapture( 0 );
    IplImage *frame = cvQueryFrame(capture);

    while(1) 
    {
        // if we are on the 20th frame, quit.
        if (i==20)
        {
            cvReleaseCapture ( &capture );
            break;
        }

        // if the user types whatever key 27 corresponds to, quit.
        char c = cvWaitKey(33);
        if( c == 27 )
        {
            cvReleaseCapture ( &capture );
            break;
        }
        // do you want to get the next frame?  here.
        frame = cvQueryFrame( capture );
        i++;
    }
    return 0;
}

您的问题是释放捕获后您没有中断,因此您将使用释放的相机继续循环。此外,你有IplImage *frames而不是IplImage *frame. 这一次只会指向一个帧,所以我认为重命名它会对你有所帮助。

于 2013-07-06T15:49:32.693 回答