OpenCV错误 – Core.hpp头必须编译为C ++

我已经尝试过Core.hpp, Base.hpp header must be compiled as C++错误。 我把BITCODE设置为NO

 #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 

在我的OpenCVSample.mm我在头文件中包含了#import "OpenCV.h

Git: https : //github.com/n1tesh/OpenCV-Demo

你需要的是一个预编译头文件。 包含以下内容的.xcodeproj文件的同一文件夹中创build一个PrefixHeader.pch文件:

 #ifndef PrefixHeader_pch #define PrefixHeader_pch #ifdef __cplusplus #include "opencv2/opencv.hpp" // include other opencv2 headers if needed. #endif #endif /* PrefixHeader_pch */ 

然后转到Project的Build Settings,searchPrefix Header并将其设置为PrefixHeader.pch

另外,如果你想将MMOpenCVHelper.h到你的swift代码,它只能是Objective-C ++。 把任何OpenCV,或标准的C ++,在MMOpenCVHelper.mm 。 例如:

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可以这样做(请validation一下,因为我对Swift不是很熟悉):

 let UIImage * processedImage = MMOpenCVHelper.applyOpenCVTo(uiImage);