cvCaptureFromCAM线程模糊行为

时间:2014-03-17 15:57:40

标签: c++ multithreading opencv

对于我的最新项目,我在OpenCV和Kinect SDK的帮助下创建了一个远程控制应用程序。

只有当我从主线程(gui线程)调用cvCaptureFromCAM方法时它才起作用。如果我从另一个线程调用此方法,它每次都返回null。

我尝试过常见的解决方案,用参数-1或CV_CAP_ANY调用cvCaptureFromCAM - 它也返回null。

void Tracker::Start()
{
    //more code
    _beginthread(Tracker::StartCapture, 0, NULL);
}

void Tracker::StartCapture(void *dummy)
{

    CvCapture* capture = cvCaptureFromCAM(1);

    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, CAPTURE_WIDTH );
    cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, CAPTURE_HEIGHT);
    cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 25);

    // It takes about 2 seconds before capture can get frames from camera
    // Also we must check if the camera is connected or not
    while(capture == NULL)
    {
        if(_captureRetriesCount > 10) {
            _endthread();
            return;
        }

        Sleep(500);
        capture = cvCaptureFromCAM( CV_CAP_ANY );

        _captureRetriesCount++;
    }
    //more code

我知道cvCaptureFromCAM不是线程安全的。我创建了一个互斥锁来锁定访问权限,但它再次返回null。我还尝试使用Windows Api中的_beginthread,_beginthreadex和CreateThread创建线程。结果相同。

OpenCv版本是2.1。

从主线程调用 (http://s11.postimg.org/fges42441/working.png

从另一个线程调用 (http://s8.postimg.org/5dwd2ewhf/wrong.png

我希望我已经足够清楚了,我到处寻找答案,但我还没有找到答案。

0 个答案:

没有答案