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);