2013-07-06 42 views
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; 
} 

回答

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。这只会指向一次一帧,所以我想重命名它会对你有所帮助。

+0

克里斯我没有故意破坏它。我想在流程存活时释放相机。在这种情况下,该过程将在达到第20帧时关闭。 – user2551056

+0

@ user2551056如果您之后做了某些事情,该过程仍可以存活。你能给我一个用例吗?我很难理解你的问题。你必须不断调用'cvQueryFrame'来获取相机的新帧,但如果你释放相机,你不能这样做(你的程序会崩溃)。 – Chris

+0

我很抱歉没有提供完整的信息。我想在另一个过程中使用相机而不会杀死第一个。例如,如果我运行使用相机的第二个进程,则会出现以下错误:VIDIOC_STREAMON:设备不适用的ioctl。第一个过程是不释放相机,我希望它活着。 – user2551056