用CCameraDS获取摄像头得要不停初始化摄像头的问题
我在用余老师的CCameraDS 库时,发现一个奇怪问题,我要每个周期都用camera.OpenCamera一次,不然camera.QueryFrame就捕捉不到图像,后面发现camera.OpenCamera后第二个周期如果不camera.OpenCamera,camera的m_bConnected就会变成false,然后报错直接跳出。代码如下,拜谢各位专家了。我是vs2010+opencv+联想笔记本自带的渣渣easycamera摄像头。。。。
程序运行很慢,我怀疑是每个周期都camera.OpenCamera得问题,所以想初始化一次就行。。。
int test_opencv_rcx(bool init)
{
VideoProcessor processor;
cv::Mat input;
CCameraDS camera;
//仅仅获取摄像头数目
if (!init)
{
cam_count = CCameraDS::CameraCount();
printf("There are %d cameras.\n", cam_count);
//获取所有摄像头的名称
for(int i=0; i < cam_count; i++)
{
char camera_name[1024];
int retval = CCameraDS::CameraName(i, camera_name, sizeof(camera_name) );
if(retval >0)
printf("Camera #%d's Name is '%s'.\n", i, camera_name);
else
printf("Can not get Camera #%d's name.\n", i);
}
if(cam_count==0)
{
MessageBox(NULL,TEXT("不能打开摄像头!"),TEXT("fuck!"),MB_OK);
return -1;}
if(! camera.OpenCamera(0, false, 640,480)) //不弹出属性选择窗口,用代码制定图像宽和高
{
fprintf(stderr, "Can not open camera.\n");
return -1;
}
}
processor.displayInput("input frame");
processor.displayOutput("output frame");
processor.setDelay(1000/processor.getFrameRate());
skip=0;
while(skip!=6)
{
//获取一帧
IplImage *pFrame = camera.QueryFrame();
if (pFrame == 0 )
{
MessageBox(NULL,TEXT("没图像啊!大哥!"),TEXT("错误!"),MB_OK);
return -1;}
input=cvarrToMat(pFrame);
skip=processor.run(input);
if (cvWaitKey(20) == 'q')
break;
}
return 0;
}