回答
OpenCV是一个用C++编写的框架。 Apple的reference告诉我们
您不能直接将C++代码导入到Swift中。相反,为C++代码创建一个Objective-C或C包装器。
,所以你不能直接导入和迅速的项目中使用OpenCV的,但其实这是不坏,因为你(需要)继续使用,这是非常有据可查的所有过网框架的C++语法。
那么你如何继续?
- 用于调用C++的OpenCV
OpenCVWrapper.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
+ (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;
@end
OpenCVWrapper.mm创建一个新的目标C++类(.H,.mm)(使用Objective-C的文件 - >新建...向导并将.m文件重命名为.mm)
#include "OpenCVWrapper.h"
#import "UIImage+OpenCV.h" // See below to create this
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
@implementation OpenCVWrapper : NSObject
+ (UIImage *)processImageWithOpenCV:(UIImage*)inputImage {
Mat mat = [inputImage CVMat];
// do your processing here
...
return [UIImage imageWithCVMat:mat];
}
@end
作为创建新类(如示例OpenCVWrapper.h/mm)的替代方法,可以使用Objective-C类将OpenCV功能扩展到现有的Objective-C类。例如UIImage的+ OpenCV的类别:
的UIImage + OpenCV.h
#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>
@interface UIImage (OpenCV)
//cv::Mat to UIImage
+ (UIImage *)imageWithCVMat:(const cv::Mat&)cvMat;
- (id)initWithCVMat:(const cv::Mat&)cvMat;
//UIImage to cv::Mat
- (cv::Mat)CVMat;
- (cv::Mat)CVMat3; // no alpha channel
- (cv::Mat)CVGrayscaleMat;
@end
的UIImage + OpenCV.mm
参见https://github.com/foundry/OpenCVSwiftStitch/blob/master/SwiftStitch/UIImage%2BOpenCV.mm
更新Bridging-Header,通过导入将您创建的所有Objective-C++类提供给Swift新创建的包装(
#import "OpenCVWrapper.h"
)使用您的包装在斯威夫特文件:
令图像=的UIImage(命名为: “image.jpeg”) 让processedImage = OpenCVWrapper.processImageWithOpenCV(图)
桥头中包含的所有Objective-C++类都可以直接从Swift中获得。
我已经在GitHub上演示:
https://github.com/foundry/OpenCVSwiftStitch
它展示了如何使用OpenCV的拼接从基于SWIFT的项目。 openCV方面没有太多,它只是一个演示如何将各个部分放在一起。由于Swift不会直接与C++对话,它使用一个简单的Objective-C++包装来在iOS端和openCV端之间进行调解。
制造回答这些问题:
Can I mix Swift with C++? Like the Objective - C .mm files
libraries to CAPTURE panorama in iOS 6
- 1. 在iOS Swift项目中使用OpenCV处理视频
- 2. OpenCV HoughTransformation在Swift中
- 3. 在iOS上使用OpenCV FileStorage
- 4. 使用swift在IOS下使用swift在xcode中实现Bump Distortion
- 5. 如何在iOS中使用OpenCV?
- 6. 如何在iOS openCV中使用CvPhotoCamera?
- 7. 如何在Swift中使用MKSnapshotter(iOS)
- 8. 在Swift中使用简单的Ping(iOS)
- 9. OpenCV在Swift IOS项目中读取文件
- 10. OpenCV使用C++在iOS上使用Base64在iOS上使用base64发送图像
- 11. 当在Swift Project中使用OpenCV时,无法生成模块“opencv2”
- 12. iOS/Swift:使用touchesmoved将UIImageView
- 13. iOS - 使用Swift的CAEmitterCell
- 14. 关于openCV在ios中的应用
- 15. 在swift中使用C++ DLL
- 16. 使用Swift的iOS 11中的imageView
- 17. iOS中使用Swift的库目录
- 18. 我想在iOS上使用datePicker swift
- 19. 在Swift中使用iosMath
- 20. 在iOS中使用Swift 3.0使用Spotify SDK
- 21. 使用OpenCV在ios应用程序中进行圆检测
- 22. backBarButtonItem iOS中(SWIFT)
- 23. 在ios 9中如何在swift 3中使用Alamofire?
- 24. iOS UIView.animatewithDuration在Swift 2.2中?
- 25. view在iOS中录制swift?
- 26. 委托没有在SWIFT中调用iOS
- 27. 无法在Swift iOS中调用AVAssetImageGeneratorCompletionHandler
- 28. didSelectItemAtIndexPath未在ios swift中调用
- 29. 在ios swift中启用栈金丝雀
- 30. 在iOS中使用openCV拼接两张图像
你好,我是新来的OpenCV。你能告诉我在UIImage + OpenCV类中应该有什么?我应该从哪里下载它? – GMHSJ
@GMHSJ:它是UIImage的扩展,它有助于将cv :: Mat结构转换为UIImage,因此您必须在您的项目中创建它。 – Shrawan
#include应包含在其他所有内容之前。如果不会出现一些冲突。 –
Pochi