用CCameraDS获取摄像头得要不停初始化摄像头的问题

kenshinbc 2018-02-27 09:25:49
我在用余老师的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;
}
...全文
386 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsxyhelu2015 2018-03-23
  • 打赏
  • 举报
回复
shiqi.yu的这个函数库我进行了重新封装,也和他说过这事了,当时还帮助宣传了一下,具体请参考 《基于opencv和mfc的摄像头采集代码(GOMFCTemplate2)持续更新》http://www.cnblogs.com/jsxyhelu/p/GOMFCTemplate2.html
kenshinbc 2018-02-27
  • 打赏
  • 举报
回复
额,找到了问题了,变量定义位置问题。为啥又要自己给自己结贴,忧郁。。。

4,248

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧