OpenCV开启USB免驱摄像头问题cvCaptureFromCAM(-1)执行失败
小弟写了一个ocx,使用OpenCV打开USB摄像头,并进行录像处理。
开启摄像头和录像功能都在线程函数中处理,代码如下:
video = NULL;
frame = NULL;
capture = cvCaptureFromCAM(-1);
//capture = cvCreateCameraCapture(1);
if(!capture) //如果不能打开摄像头给出警告
{
stErrorMsg.Format("ERROR cvCaptureFromCAM [%d]", -1);
CLog::info(stErrorMsg);
return -1;
}
int i = 0;
do
{
if(i==10)
break;
frame=cvQueryFrame(capture);
++i;
}while(!frame);
; //首先取得摄像头中的一帧
if(!frame)
{
stErrorMsg.Format("ERROR cvQueryFrame [%d]", -1);
CLog::info(stErrorMsg);
return -1;
}
//创建CvVideoWriter对象并分配空间
video=cvCreateVideoWriter(pathTemp.GetBuffer(0),
CV_FOURCC('X', 'V', 'I', 'D'), 20,
cvSize(frame->width,frame->height));
//保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
if(!video) //如果能创建CvVideoWriter对象则表明成功
{
stErrorMsg.Format("ERROR cvCreateVideoWriter [%d]", -1);
CLog::info(stErrorMsg);
return -1;
}
while(!bThreadEnd)
{
frame=cvQueryFrame(capture); //从CvCapture中获得一帧
if(!frame)
{
stErrorMsg.Format("ERROR cvQueryFrame [%d]", -1);
CLog::info(stErrorMsg);
return -1;
}
int iResult = cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功
if(1!=iResult)
{
stErrorMsg.Format("ERROR cvWriteFrame [%d]", -1);
CLog::info(stErrorMsg);
}
}
//hExit = CreateMutex(NULL,FALSE, NULL);
cvReleaseVideoWriter(&video);
cvReleaseCapture(&capture);
问题:
ocx在js中调用使用ie打开测试页面可以录制视频,但是使用ocx测试工具TstCon.exe加载ocx进行录制就在红色函数那里调用失败。
请问IE调用和测试工具调用有什么区别,为什么会有这样的区别,这个问题该如何解决呢?