Я использую оболочку Objective-C ++ для openCV в Swift 5 (и XCode 11.4). Это работает, и мое обнаружение объекта работает в режиме реального времени на телефоне. Однако я не могу понять, как перейти к другому (заранее определенному) представлению / экрану результатов после того, как мои задачи по обнаружению возражений будут выполнены. Все действия происходят в моей оболочке c ++ - есть ли способ выполнить переход изнутри c ++ или выполнить функцию, связанную с базовым viewcontroller, et c? Ниже приведены мои ViewController.swift и OpenCVWrapper.mm (не включая OpenCVWrapper.h и заголовок моста - они, похоже, не имеют отношения к вопросу, но могут добавить их при необходимости).
Я нашел это статья об использовании делегата и протокола для потенциально достижения sh того, что мне нужно, но я продолжаю получать crypti c cra sh при сборке - это может быть из-за моего незнания, где и как определить / инициализировать протокол в этом конкретном c использовании.
Спасибо за помощь!
ViewController.swift (removed non-essential parts for simplicity)
```
import UIKit
class ViewController: UIViewController {
var videoCameraWrapper : OpenCVWrapper!
@IBOutlet weak var imageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
self.videoCameraWrapper = OpenCVWrapper(imageView:imageView) // Call wrapper
self.videoCameraWrapper.startCamera()
}
//
// Is there a function that can put put here to get called when the CV detection is done?
//
}
```
OpenCVWrapper.mm
```
#import "OpenCVWrapper.h"
#import <opencv2/videoio/cap_ios.h>
using namespace cv;
@interface OpenCVWrapper () <CvVideoCameraDelegate>
@end
@implementation OpenCVWrapper
{
CvVideoCamera * videoCamera;
}
-(id)initWithImageView:(UIImageView*)iv
{
videoCamera = [[CvVideoCamera alloc] initWithParentView:iv];
videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
videoCamera.defaultFPS = 30;
videoCamera.grayscaleMode = NO;
videoCamera.delegate = self;
return self;
}
#ifdef __cplusplus
- (void)processImage:(Mat&)image
{
Mat image_copy;
cvtColor(image, image_copy, COLOR_BGRA2BGR);
/* Doing CV detection here - it is working correctly - keeping track of number & type of objects detected. Below, need to move to ResultsViewController.swift view if a certain number of objects are detected. */
if (num_objects_detected > threshold) {
// How to go to new screen (ResultsViewController.swift), and send some of this CV data there?
}
}
#endif
-(void)startCamera
{
[videoCamera start];
}
-(void)stopCamera
{
[videoCamera stop];
}
@end
```