Dopo aver aggiunto il framework OpenCV 2 nel mio progetto xcode, ho provato a cercare samlpes o tutorial per l'integrazione con swift.Utilizzo di OpenCV in Swift iOS
Ci sono dei buoni tutorial per lo stesso?
Dopo aver aggiunto il framework OpenCV 2 nel mio progetto xcode, ho provato a cercare samlpes o tutorial per l'integrazione con swift.Utilizzo di OpenCV in Swift iOS
Ci sono dei buoni tutorial per lo stesso?
OpenCV è un framework scritto in C++. Apple reference ci dice che
Non è possibile importare codice C++ direttamente in Swift. Invece, crea un wrapper Objective-C o C per il codice C++.
quindi non è possibile direttamente importare e utilizzare OpenCV in un progetto veloce, ma questo in realtà non è affatto male, perché voi (bisogno) continua a utilizzare la sintassi C++ del quadro che è abbastanza ben documentato in tutta la rete .
Quindi come procedere?
OpenCVWrapper.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
+ (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;
@end
OpenCVWrapper.mm (utilizzare il File -> Nuovo ... Wizard per Objective-C e rinominare il file .m in .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
In alternativa alla creazione di nuove classi come l'esempio OpenCVWrapper.h/mm, è possibile utilizzare le categorie Objective-C per estendere le classi Objective-C esistenti con la funzionalità OpenCV. Per esempio categoria 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
Vedi https://github.com/foundry/OpenCVSwiftStitch/blob/master/SwiftStitch/UIImage%2BOpenCV.mm
Aggiornare il Bridging-Header per rendere tutte le classi Objective-C++ create disponibili per Swift importando i nostri involucri appena creati (#import "OpenCVWrapper.h"
)
Usa il tuo involucro nei file Swift:
let image = UIImage (denominato: "image.jpeg") lasciare processedImage = OpenCVWrapper.processImageWithOpenCV (immagine)
Tutte le classi Objective-C++ incluse nell'intestazione del bridge sono disponibili direttamente da Swift.
Ho una demo su github:
https://github.com/foundry/OpenCVSwiftStitch
Essa mostra come utilizzare la cucitrice OpenCV da un progetto Swift-based. Non c'è molto per il lato openCV, è davvero solo una dimostrazione di come mettere insieme i vari pezzi.
Poiché Swift non parla direttamente in C++, utilizza un sottile wrapper Objective-C++ per mediare tra il lato iOS e il lato openCV.
Made in risposta a queste domande:
Can I mix Swift with C++? Like the Objective - C .mm files
libraries to CAPTURE panorama in iOS 6
@ Kashif, ho risposto tramite i dettagli del contatto sul tuo sito web. – foundry
Questa demo (OpenCVSwiftStitch) su github è il miglior tutorial e demo pratica che ho trovato finora sull'integrazione di Swift con OpenCV. Risponde alle domande, fornisce istruzioni per l'installazione e mostra cosa mettere nell'implementazione della categoria UIImage + OpenCV. Dopo aver letto questo ho finalmente potuto andare, convertire un'immagine da UIImage in OpenCV Mat, fare un po 'di elaborazione, riconvertire e visualizzare l'immagine – Paulus
@Paulus - grazie per il feedback. Sono contento che tu l'abbia trovato utile. – foundry
Ciao Sono nuovo di OpenCV. Per favore, dimmi cosa dovrebbe esserci nella categoria UIImage + OpenCV ?? Dovrei scaricarlo da qualche parte? – GMHSJ
@GMHSJ: È l'estensione di UIImage che aiuta a convertire in e da cv :: Mat structure in UIImage.So devi crearlo nel tuo progetto. – Shrawan
#include Dovrebbe essere incluso prima di tutto il resto. In caso contrario, appariranno alcuni conflitti. –
Pochi