Visual c++ 如何避免;视频源->;“捕获源”;OpenCV 2.3.0中的选择-Visual C++;2008

Visual c++ 如何避免;视频源->;“捕获源”;OpenCV 2.3.0中的选择-Visual C++;2008,visual-c++,opencv,Visual C++,Opencv,我有一个完美的OpenCV代码(具有函数cvCaptureFromCAM(0))。但是当我修改它在一个单独的线程中运行时,我得到这个“视频源”选择对话框,它要求我选择网络摄像头。即使我选择了一个cam,函数cvCaptureFromCAM(0)似乎返回null。我还尝试将值0,-1,1,CV\u CAP\u ANY传递到此函数。我怀疑此对话框导致此问题。有没有办法避免这种情况,或者有没有人有其他意见 调试时,我遵循了以下帖子: 编辑 代码结构 //header includes CvCapt

我有一个完美的OpenCV代码(具有函数
cvCaptureFromCAM(0)
)。但是当我修改它在一个单独的线程中运行时,我得到这个“视频源”选择对话框,它要求我选择网络摄像头。即使我选择了一个cam,函数
cvCaptureFromCAM(0)
似乎返回null。我还尝试将值
0,-1,1,CV\u CAP\u ANY
传递到此函数。我怀疑此对话框导致此问题。有没有办法避免这种情况,或者有没有人有其他意见

调试时,我遵循了以下帖子:

编辑 代码结构

//header includes
CvCapture* capture =NULL;
IplImage* frame = NULL;

int main(int argc, char** argv){

    DWORD qThreadID;
    HANDLE ocvThread = CreateThread(0,0,startOCV, NULL,0, &qThreadID);   
    initGL(argc, argv);   
    glutMainLoop(); 
    CloseHandle(ocvThread);    
    return 0;
}

void initGL(int argc, char** argv){    
    //Initialize GLUT
    //Create the window
    //etc
}

DWORD WINAPI startOCV(LPVOID vpParam){ 
    //capture = cvCaptureFromCAM(0); //0 // CV_CAP_ANY

    if ((capture = cvCaptureFromCAM(1)) == NULL){ // same as simply using assert(capture)
      cerr << "!!! ERROR: vCaptureFromCAM No camera found\n";
      return -1;
    }    
    frame = cvQueryFrame(capture);
}    
//other GL functions
//标题包括
CvCapture*capture=NULL;
IplImage*frame=NULL;
int main(int argc,字符**argv){
dwordqthreadid;
HANDLE ocvThread=CreateThread(0,0,startOCV,NULL,0,&qThreadID);
initGL(argc,argv);
glutMainLoop();
CloseHandle(ocvThread);
返回0;
}
void initGL(int argc,char**argv){
//初始化过剩
//创建窗口
//等
}
DWORD WINAPI startOCV(LPVOID vpParam){
//capture=cvCaptureFromCAM(0);//0//CV\u CAP\u ANY
if((capture=cvCaptureFromCAM(1))==NULL){//与简单使用assert(capture)相同

cerr由于这是一个仅在Windows上发生的问题,一个简单的解决方法是将
cvCaptureFromCAM(0)
保留在
main()
线程上,然后在单独的线程上执行图像处理,正如您最初打算的那样


只需将
CvCapture*capture=NULL;
声明为全局变量,以便您的所有线程都可以访问它。

已解决。我无法摆脱上述对话框,但我通过简单地复制行capture=cvCaptureFromCAM(0)避免了错误

这只是随机的。我怀疑这和线程的行为有关。你们的想法是什么


感谢大家的贡献。

这是Windows上OpenCV的一种奇怪行为。OpenCV 2.3.1会发生这种情况吗?我的版本是2.3.0(coutGood,但这并不能回答我的问题。你是否尝试过
cvCreateCameraCapture
而不是
cvCaptureFromCAM
capture = cvCaptureFromCAM(0);
capture = cvCaptureFromCAM(0);