2017-09-19 10 views
0

私はCore.hpp, Base.hpp header must be compiled as C++エラーを試しました。 BITCODEをNOと設定しました。私OpenCVSample.mmOpenCVエラー - Core.hppヘッダーはC++としてコンパイルする必要があります

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 

@interface OpenCV : NSObject 
    /// Converts a full color image to grayscale image with using OpenCV. 
+ (nonnull UIImage *)cvtColorBGR2GRAY:(nonnull UIImage *)image; 
+ (cv::Mat)cvMatFromAdjustedUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatFromUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatGrayFromAdjustedUIImage:(UIImage *)image; 
@end 

私は、ヘッダに#import "OpenCV.hが含まれています。

Gitリポジトリ:https://github.com/n1tesh/OpenCV-Demo

+0

.mmファイルは、インスペクタで客観的なC++ソースとして遵守する必要があります。 – Jack

+0

@Jackはい。タイプを 'Objective-C++ Source'に変更しましたが、それと同じエラーです。 – Nitesh

+0

ビルド設定検索でアクティブアーキテクチャのみをビルドし、NOに設定 –

答えて

1

必要なものは、プリコンパイルヘッダファイルです。コンテンツと.xcodeprojファイルと同じフォルダにPrefixHeader.pchファイルを作成します。

#ifndef PrefixHeader_pch 
#define PrefixHeader_pch 

#ifdef __cplusplus 
#include "opencv2/opencv.hpp" 
// include other opencv2 headers if needed. 
#endif 

#endif /* PrefixHeader_pch */ 

はその後、プロジェクトのビルド設定に行くプレフィックスヘッダーを検索しPrefixHeader.pchに設定します。あなたはSWIFTコードにブリッジMMOpenCVHelper.hを呼び出したい場合は

また、それだけで++のObjective-Cである必要があります。 MMOpenCVHelper.mmには、OpenCV(標準C++)を入れてください。

MMOpenCVHelper.h:たとえば

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

// These two headers god to mm file 
// #include <opencv2/imgproc/imgproc.hpp> 
// #include <opencv2/highgui/highgui.hpp> 


@interface MMOpenCVHelper : NSObject 
+ (UIImage *) applyOpenCVTo: (UIImage*) uiImage; 

// these methods have to be in mm file, hence private 
// + (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat; 
// + (cv::Mat)cvMatFromAdjustedUIImage:(UIImage *)image; 
// + (cv::Mat)cvMatFromUIImage:(UIImage *)image; 
// + (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image; 
// + (cv::Mat)cvMatGrayFromAdjustedUIImage:(UIImage *)image; 


@end 

そしてMMOpenCVHelper.mm:私はスウィフトに非常に精通していないよので、

#import "MMOpenCVHelper.h" 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 

@implementation MMOpenCVHelper 

// implementation of public methods: 
+ (UIImage *) applyOpenCVTo: (UIImage*) uiImage{ 
    cv::Mat cvFrame = [MMOpenCVHelper cvMatFromAdjustedUIImage: uiImage]; 
    // do something with cvFrame using OpenCV 
    cv::Mat ret = cvFrame.clone(); 

    return [MMOpenCVHelper UIImageFromCVMat: ret]; 
} 

// Implementations of the conversion functions: 
+ (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat{ 
    // do something here 
    return uiImage; 
} 

+ (cv::Mat)cvMatFromAdjustedUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatFromUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatGrayFromUIImage:(UIImage *)image; 
+ (cv::Mat)cvMatGrayFromAdjustedUIImage:(UIImage *)image; 
@end 

その後、SomeSwiftFile.swiftにあなたが行うことができます(これを確認してください):

let UIImage * processedImage = MMOpenCVHelper.applyOpenCVTo(uiImage); 
関連する問題