Я создал openCV camera stream
, используя objc ++ и Swift, и у меня получился рабочий проект.
Итак, это мои файлы:
1.openCVWrapper.h :
#import "myProjectDelegate.h"
@interface OpenCVWrapper : NSObject
- (void)setCameraDelegate: (id<OpenCVCamDelegate>) delegate;
@end
2.openCVWrapper.mm :
@implementation OpenCVWrapper : NSObject
- (void) setCameraDelegate: (id<OpenCVCamDelegate>) delegate {
myProject* camera = [myProject myProjectInstance];
camera.delegate = delegate;
}
@end
3.myProject.h :
@interface myProject : NSObject<CvVideoCameraDelegate>
@property CvVideoCamera* cam;
@property id<OpenCVCamDelegate> delegate;
+ (id) myProjectInstance;
- (void) initializeCamera;
@end
4.myProject.mm :
static void myStaticFunction() {
// How to call "CALL_THIS_FUNCTION" from !right! here
}
- (void)processImage:(cv::Mat &)image {
if (self.delegate != nil) {
image = doSomething(image);
[self.delegate callbackImage: MatToUIImage(image)];
}
}
5.myProjectDelegate.h :
@protocol OpenCVCamDelegate <NSObject>
- (void) callbackCameraFrame: (UIImage*) image;
@end
6.myProject.swift :
class ViewController: UIViewController, OpenCVCamDelegate {
var OpenCVWrapperInstance: OpenCVWrapper!
override func viewDidLoad() {
OpenCVWrapperInstance = OpenCVWrapper()
OpenCVWrapperInstance.setCameraDelegate(self)
}
func CALL_THIS_FUNCTION() {
print("Yeah, success!");
}
func callbackCameraFrame(_ image: UIImage!) {
// do some stuff with the image
}
}
Мой вопрос:
Итак, поток с камеры и делегат Swiftработает вполне нормально, но теперь я бы хотел вызвать Swift-функцию CALL_THIS_FUNCTION
из статического метода, который вы можете найти в 4.myProject.mm:
.То, что я уже пробовал, кажется неправильным, потому что до сих пор я не мог заставить его работать.
Моей первой идеей было использование делегата в .myProject.mm
, но не возникло ли ошибок или ошибок.это называется быстрой функцией.Посмотрите на мой код:
id<OpenCVCamDelegate> myDelegate;
static void myStaticFunction() {
// How to call "CALL_THIS_FUNCTION" from !right! here
[globalDelegate CALL_THIS_FUNCTION];
}
Примечание : Любая помощь в решении этой проблемы будет очень признательна :)