在此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
来解决我的问题。实际上它不是关于委托方法。
在代码中使用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 都有效。