我正在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 :(得分:0)
代码或系统设计中没有错误,但问题出在嵌入式系统本身的DMA模块上。 DMA批量传输时的损坏会导致此错误。所以没有软件问题。