当前位置: 首页 > 面试题库 >

在Swift iOS中使用OpenCV

夹谷飞龙
2023-03-14
问题内容

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

有没有很好的教程呢?


问题答案:

OpenCV是用C
++编写的框架。苹果的参考资料告诉我们

您不能将C 代码直接导入Swift。而是为C 代码创建一个Objective-C或C包装器。

因此,您不能直接在一个快速的项目中导入和使用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 (使用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,使您创建的所有Objective-C ++类均可用于Swift#import "OpenCVWrapper.h"

  2. 在您的Swift文件中使用包装器:

let image = UIImage(named:“ image.jpeg”)let createdImage =
OpenCVWrapper.processImageWithOpenCV(image)

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



 类似资料:
  • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

  • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

  • 问题内容: 我正在编写一个程序,该程序需要在Tkinter窗口中显示视频流。由于还将有用于执行各种功能的按钮,因此我使用网格来组织一切。 以下代码是从“显示”网络摄像头序列TkInter修改而来的,在我的Raspberry Pi上可以正常工作: 但是,将其与Tkinter结合使用是行不通的。(在下面的内容中,我尝试注释掉Display 1,Display 2和都不显示。) 如何显示视频? 问题答案

  • 我有一个var json:[[String:Any]=[[:]],其中包含如下json响应: 我写了一个枚举: 然后,我使用此方法对类别进行排序: 在那之后,我得到了这样一个错误 二进制运算符““不能应用于“

  • 问题内容: 我刚刚在Windows 7计算机上安装了OpenCV。结果,我得到一个新目录: 在此目录中,我有两个文件:和。 然后,我尝试使用from Python。我执行以下操作: 结果,我收到以下错误消息: 我究竟做错了什么? 添加 至于有人建议在这里,我抄的内容的。它没有帮助。 加了2 我的环境变量具有以下值: 我需要改变什么吗?我需要添加一些东西吗? 加3 我认为我的问题很笼统:如何使用图书

  • null 但是,当我使用ndk-build运行Android.mk时,会出现以下错误: 这是Android.mk的内容: 我在建图书馆,有什么帮助吗? 向jni添加application.mk文件 APP_ABI:=armeabi APP_PLATFORM:=android-9 将Android.mk文件添加到jni(更改LOCAL_SRC_FILES和LOCAL_MODULE值) 将此代码添加到