2014-04-16 20 views
-2

在這個doc中,OpenCV爲cap_ios.h定義了一個代理方法用於視頻處理。聲明是這樣的:在一定條件之後重新啓動代理方法

@class CvVideoCamera; 

@protocol CvVideoCameraDelegate <NSObject> 

#ifdef __cplusplus 
// delegate method for processing image frames 
- (void)processImage:(cv::Mat&)image; 
#endif 

@end 

而且,我把我的代碼用於視頻處理功能,裏面的(void)processImage:(cv::Mat&)image;ViewController.mm

在處理OpenCV + C++中的視頻幀時,我用do-while循環來處理攝像機捕獲的每一幀。在循環中,如果某些條件爲真,則代碼將不會繼續,而是從頭重新開始。代碼如下:

do { 
    captureAndDoSomething(); 

    if (condition) { 
     continue;  // To capture a new frame 
    } 

    doSomething(); 
} while(...); 

所以,我的問題是如何重新啓動iOS中編碼功能(void)processImage:(cv::Mat&)image?現在沒有循環,我不能再使用continue了。

- (void)processImage:(cv::Mat&)image { 
    doSomething(); // Capturing is done by delegate I think 

    if (condition) { 
         // How to restart and capture a new frame now? 
    }  

    doSomething(); 
} 
+0

完成該功能後發佈通知,以便您得到通知再次調用該功能。 –

回答

0

我發現我錯了,並用goto來解決我的問題。其實它不是關於委託方法。

One thing to beware

當你在代碼中使用goto關鍵字。您必須確保任何 變量不應在goto關鍵字下方聲明,並且在其範圍內指定標籤 以上的變量。

否則,您將得到goto into protected scope錯誤。對於我的情況下,代碼應該是:

- (void)processImage:(cv::Mat&)image { 
    doSomething();  
    initialize();   // Method 1: variables declared before goto 

    if (condition) { 
     goto fin; 
    }  

    doSomething(); 
    if (1) { 
     initialize()  // Method 2: variables declared in its scope 
    } 

fin: 
    lastAction(); 
} 

兩個方法1種方法2個作品。

相關問題