HOG检测:网络摄像头无法抓取新框架

时间:2014-12-09 09:35:15

标签: opencv computer-vision

我有以下代码从网络摄像头获取视频,然后执行HOG检测。

但是,当我添加HOG检测代码时,代码只能在运行时抓取第一个图像,并且在后续迭代时不会刷新。我使用断点检查程序是否持续运行。

请指教。谢谢。

void doDetection(void){

    VideoCapture cap("http://user:password@10.0.0.1/mjpg/video.mjpg");

    if (!cap.isOpened())
        return;

    HOGDescriptor hog;

    hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

    while (true)
    {
        Mat img, mono_img;

        bool status = cap.read(img);

        if (status == false) break;

        vector<Rect> found, found_filtered;

        cvtColor(img, mono_img, CV_BGR2GRAY);

        equalizeHist(mono_img, mono_img);

        // this is the problem statement , when removed this program refresh fine
        hog.detectMultiScale(mono_img, found, 0, Size(8, 8), Size(50, 50), 1.05, 2);



        imshow("Show", img);

        if (waitKey(20) >= 0)
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

我发现即使暂停代码执行一段时间也会发生这种情况。 在我的情况下,MJPEG OVERREAD将出现在控制台中,之后不会再从流中抓取图像,但流仍然是“开放”

我围绕这个重置捕获的问题构建了这个小问题。把它放在你的WHILE

    if (cap.isOpened())
    {
        cap.read(img);

        if (img.rows == 0)
        {
            cap.release();
            cap.open("");//Insert own url
            cap.read(img);
        }
    }
    else
    {
        cap.open(""); //Insert own url
        cap.read(img);
    }

如果通过让应用程序保持运行来“解决”问题,则应该在单独的线程上捕获帧以防止流像这样死亡。 如果这不能“解决”问题,我不确定还有什么可能是错的