2015-02-23 78 views
-1

我的小程序用於讀取相機饋送,它工作正常。但是當運行應用程序時,當相機連接丟失時,應用程序終止。實際上,應用程序控制無法從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:[email protected]: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; 
} 

感謝。

+0

檢查這些相關答案以檢查斷開相機不能做到這一點我自己: http://stackoverflow.com/questions/5637425/camera-connection-and-disconnection-catch http://stackoverflow.com/questions/4028463/detecting-an-unplugged-capture-device-opencv – 2015-02-23 07:19:46

+0

首先,請停止使用opencv的不再維護的c-api。那麼,不幸的是,你無能爲力。一旦你的應用程序開始等待一個框架,它會這樣做*永遠*。 – berak 2015-02-23 12:01:35

+0

除了有什麼他可以做的;這是在我指出的其他答案中完成的。當然,這不是微不足道的,但它似乎是可能的。 – 2015-02-23 16:19:29

回答

0

我不知道它是否會幫助你,但嘗試這個曾經...

1)如果連接相機到一個端口,那麼你可以連續查詢的是,它是活躍的?如果沒有激活,則相機斷開連接並相應地等待其激活。

+0

我正在使用IP攝像機,我認爲當攝像機處於斷開模式時,IP地址將不會ping,IP地址不會ping,因此我們無法檢查端口。 – user2865434 2015-02-24 08:59:43

+0

你是說它是一個基於IP的攝像機,所以當它的IP不能ping通時,它本身意味着你的攝像機斷開了連接。當你的攝像機IP沒有ping時,你可以將你的應用程序置於等待模式,並且一旦得到回覆知識產權,恢復你的appllication。 – User420 2015-03-10 17:41:20

+0

我的確如此,但我的應用程序不能從cvQueryFrame()函數中獲得。 – user2865434 2015-03-12 04:41:53

0

我認爲這個問題可能不是用cvCaptureFromFile()函數,而是用frame1 = cvQueryFrame(input)命令。您可以取消註釋掉該命令下方的if語句,並說明是否已打印出相機斷開連接。

很抱歉,但我目前還沒有獲得OpenCV庫

+0

此外,關於berak的評論,這是不正確的,因爲如果圖像無法按照docs中指定的方式讀取,函數應該返回NULL響應,http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html – Eni 2015-02-23 13:11:08

+0

即使語句未註釋,相機斷開連接時代碼的執行也不會停止。它會等待一段時間,過一段時間後會出錯。 – user2865434 2015-02-24 08:52:53

+0

它應該在嘗試抓取框架後提供某種反饋。無論克里斯托弗彼得森提供的解決方案似乎是合理的。也取決於等待之前它拋出一個錯誤多長時間,你cal總是嘗試把frame1 = cvQueryFrame(input);命令在嘗試和捕獲錯誤,所以當它拋出一個錯誤嘗試重新連接到相機(即重複此命令CvCapture * input = cvCaptureFromFile(「rtsp:// admin:[email protected]:554/ch1-s1?tcp 「);) – Eni 2015-02-24 11:25:47

相關問題