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