vs2008+opencv2.4.9 打开摄像头程序异常退出 5

vs2008+opencv2.4.9打开摄像头程序异常退出,这程序是借鉴来的,编译没错,运行就自动退出线程'Win32线程'(0xad4)已退出,返回值为-1(0xfff... vs2008+opencv2.4.9 打开摄像头程序异常退出,这程序是借鉴来的,编译没错,运行就自动退出
线程 'Win32 线程' (0xad4) 已退出,返回值为 -1 (0xffffffff)。
线程 'Win32 线程' (0x1250) 已退出,返回值为 -1 (0xffffffff)。
线程 'Win32 线程' (0xbd0) 已退出,返回值为 -1 (0xffffffff)。
程序“[168] CameraTest.exe: 本机”已退出,返回值为 -1 (0xffffffff)。
代码如下
#include<stdio.h>
#include<highgui.h>

int main()
{
char title[128];
IplImage *img = 0;
int key = 0;

CvCapture* capture = cvCaptureFromCAM(-1);
// If no compatible camera detected, print message and exit.
if (capture == NULL) {
printf("No camera detected!\n");
exit(-1);
}

// query frame and generate window title
img = cvQueryFrame(capture);
if (img == NULL) {
printf("Camera detected, but grab image error!\n");
exit(-1);
}
sprintf(title, "Camera Testing (%dx%d)", img->width, img->height);

// create a window at the top-left corner
cvNamedWindow(title, CV_WINDOW_AUTOSIZE);
cvMoveWindow(title, 0, 0);

while(1)
{
img = cvQueryFrame(capture);
// show the frame in the window created
cvShowImage(title, img);

key = cvWaitKey(20); // wait 20 ms
if ( key == 's' || key == 'S')
{
cvSaveImage("test.jpg", img);
continue;
}
if ( key > 0)
break;
}
// destroy the window and release the capture
cvDestroyWindow(title);
cvReleaseCapture( &capture );
return 0;
}
每次运行都提示选择视频源,点击确定后就异常退出

环境 win7 vs2008 opencv2.4.9
展开
 我来答
hnyzyty
2014-08-27 · 超过14用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:33.1万
展开全部

程序应该是在这两个地方出了问题:

  1. if (capture == NULL) {
            printf("No camera detected!\n");
            exit(-1);
        }

  2. if (img == NULL) {
            printf("Camera detected, but grab image error!\n");
            exit(-1);
        } 

第一段的作用是判断摄像头有没有启动成功,第二段的作用是在判断有没有从摄像头读到图像。

“CvCapture* capture = cvCaptureFromCAM(-1);”这件话的作用是打开摄像头。

因为摄像头启动和图像读取都需要一定的时间,所以程序运行到这两个判断步时,摄像头可能还没有启动或者启动后获取的图像还未能传输到相应位置,进而会触发相应判断条件而执行“exit(-1)”,引起程序异常退出。

你可以在调试程序时分别在这两个判断语句中设置断点来验证是不是该处出现了问题。

如果问题是出现在这里,解决方法如下:

把两个判断条件段改为

while(1)

{

      if (capture !=NULL)

          break;

}

while(1)

{

     if (img!=NULL)

         break;

}

如果问题不是出现在这里,欢迎继续交流。(我也是刚接触opencv,遇到过类似的问题。回答若有不准确的地方请包涵并指出。)

haoyzxyzc
2014-08-27
知道答主
回答量:23
采纳率:0%
帮助的人:12.1万
展开全部
cvCaptureFromCAM(0); 试一下
追问
0的话,不显示图像,难道是我的电脑和外接摄像头问题?
追答
你采纳的是正解。
追上:再改一个地方就可以show出来了:
// query frame and generate window title
img = cvQueryFrame(capture);
if (img == NULL) {
printf("Camera detected, but grab image error!\n");
exit(-1);
}
这里不要exit(-1);,而是直接往下运行,再次获取图片。
这里主要是初始化需要时间的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式