2012-10-19 4 views
2

OpenCV에서 응용 프로그램을 개발 중입니다. 카메라에서 스냅 사진을 찍고 캡처를 종료합니다. 내 캡처 코드 아래에 다음 OpenCV 캡처 코드가 시스템 함수에서 호출 될 때 고정됩니다.

(capturecam1lowres.c) 나는 시스템에서이 코드의 실행 파일을 호출하고

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


int main(int argc, char* argv[]) 
{  
    CvCapture* camera = cvCreateCameraCapture(0); // Use the default camera 

    IplImage*  frame = 0; 

    cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_WIDTH,1024) ; 
    cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_HEIGHT,768); 

    frame = cvQueryFrame(camera); //need to capture at least one extra frame 
// frame = cvQueryFrame(camera); 

    if (frame != NULL) { 
    printf("Frame extracted from CAM1\n\r"); 
     cvSaveImage("/home/root/Desktop/BBTCP/webcam1.jpg", frame,0); 
    } else { 
     printf("Null frame 1\n\r"); 
    } 
    cvReleaseCapture(&camera); 
    cvReleaseImage(&frame); 
    return 0; 
} 

(./ capturecam1lowres) 하지만 때로는

frame = cvQueryFrame(camera); 

라인 정지 (매회가 아님). 이 하위 프로그램 (capturecam1lowres)에 대한 시간 제한을 설정하려면 어떻게해야합니까? 캡처에 너무 많은 시간이 걸리면 포기하고 종료해야합니다. 어떻게하면 될까요?

나는 posix 스레드를 사용하려고했지만 결과를 얻을 수 없습니다. 아래는 내 비 작동 스레드 코드입니다.

#include <cv.h> 
#include <highgui.h> 
#include <cxcore.h> 
#include <stdio.h> 
#include <pthread.h> 
#include <stdlib.h> 
#include <unistd.h> 

void *thread_function(void *arg) 
{ 

    sleep(10); 
    exit(0); 

} 

int main(int argc, char* argv[]) 
{  
    CvCapture* camera = cvCreateCameraCapture(0); // Use the default camera 
    pthread_t mythread; 
    IplImage*  frame = 0; 

    if (pthread_create(&mythread, NULL, thread_function, NULL)) 
    { 
    printf("error creating thread."); 
    abort(); 
    } 

    if (pthread_join (mythread, NULL)) 
    { 
    printf("error joining thread."); 
    abort(); 
    } 


    cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_WIDTH,1024) ; 
    cvSetCaptureProperty(camera,CV_CAP_PROP_FRAME_HEIGHT,768); 

    frame = cvQueryFrame(camera); //need to capture at least one extra frame 
// frame = cvQueryFrame(camera); 

    if (frame != NULL) { 
    printf("Frame extracted from CAM1\n\r"); 
     cvSaveImage("/home/root/Desktop/BBTCP/webcam1.jpg", frame,0); 
    } else { 
     printf("Null frame 1\n\r"); 
    } 
    cvReleaseCapture(&camera); 
    cvReleaseImage(&frame); 
    return 0; 
} 
+0

정말 확실하지 않지만 다른 프로그램에이 프로그램을 삽입하면 임베드 될 수 있습니까? 이 프로그램은 stdout 또는 errout 버퍼가 가득 차서 * execution * 응용 프로그램에서 읽을 수없는 경우 차단할 수 있습니다. – rekire

답변

0

코드 또는 시스템 디자인에 오류가 없지만 내장 시스템 자체의 DMA 모듈에 문제가 있습니다. DMA 대량 전송이 손상되면이 오류가 발생합니다. 따라서 소프트웨어 문제는 없습니다.

관련 문제