我想将我的应用程序置于等待模式以进行摄像头连接

时间:2015-02-23 05:26:19

标签: opencv visual-c++ camera

我的小程序用于读取相机进纸,它工作正常。但是当运行应用程序期间相机连接丢失时,应用程序终止。实际上应用程序控制不能从cvCaptureFromFile()函数中出来,并且在一段时间后它给了我错误。当我在运行应用程序期间丢失相机连接时我想控制cvCaptureFromFile()函数意味着我想让我的应用程序进入相机的下一帧的等待模式,当相机连接回来时我的应用程序应该从相机自动启动读取帧。我想这样做。我尝试了很多,但无法得到任何解决方案。 我使用的是opencv 2.4.4版本。

我的cpp文件

#include "stdafx.h"
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <opencv2/imgproc/imgproc.hpp>
#include "stdio.h"

using namespace cv;
using namespace std;

char key;
IplImage* frame = cvCreateImage(cvSize(640,360),8,3);
int main()
{

    IplImage *frame1;
    back:
    CvCapture* input = cvCaptureFromFile("rtsp://admin:12345@10.101.16.112:554/ch1-s1?tcp");
    if(!input)
    {
        printf("\nWaiting for camera connection.");
        goto back;
    }
    while(1)
    {
        frame1 = cvQueryFrame(input);
        /*if(frame1 == NULL)
            printf("\nCamera is disconnected.");*/      

        cvResize(frame1,frame,1);
        cvShowImage("frame", frame);
        key = cvWaitKey(10);
        if (char(key) == 27)
           break;
    }
    cvReleaseCapture(&input);
    return 0;
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

我不知道它是否会帮助你,但尝试一次......

1)如果您将相机连接到其中一个端口,那么您可以连续轮询它是否处于活动状态?如果没有激活,则摄像机断开连接并相应地等待它激活。

答案 1 :(得分:0)

我认为问题可能不在于cvCaptureFromFile()函数,而在于使用frame1 = cvQueryFrame(input)命令。您是否可以取消注释此命令下方的if语句,并阐明是否已打印出相机已断开连接。

很抱歉,但由于我目前无法访问opencv库,因此无法自行执行此操作