gpt4 book ai didi

ios - 在 Swift iOS 中使用 OpenCV

转载 作者:IT王子 更新时间:2023-10-29 04:59:30 45 4
gpt4 key购买 nike

在我的 xcode 项目中添加 OpenCV 2 框架后,我尝试搜索示例或教程以与 swift 集成。

有什么好的教程吗?

最佳答案

OpenCV 是一个用 C++ 编写的框架。苹果的reference告诉我们

You cannot import C++ code directly into Swift. Instead, create an Objective-C or C wrapper for C++ code.

因此您不能在 swift 项目中直接导入和使用 OpenCV,但这实际上一点也不坏,因为您(需要)继续使用框架的 C++ 语法,该框架在整个网络中都有很好的记录。

那么你如何进行呢?

  1. 创建一个新的 Objective-C++ 类(.h,.mm)用于调用 C++ OpenCV

OpenCVWrapper.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface OpenCVWrapper : NSObject

+ (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;

@end

OpenCVWrapper.mm(使用 File -> New... 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

  1. 更新Bridging-Header通过导入我们新创建的包装器 (#import "OpenCVWrapper.h")

    让您创建的所有 Objective-C++ 类都可用于 Swift
  2. 在 Swift 文件中使用包装器:

    let image = UIImage(named: "image.jpeg")
    let processedImage = OpenCVWrapper.processImageWithOpenCV(image)

桥 header 中包含的所有 Objective-C++ 类都可以直接从 Swift 获得。

关于ios - 在 Swift iOS 中使用 OpenCV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30908593/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com