2013-07-06 48 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