我正在编写一个iPhone应用程序,并使用OpenCV进行一些图像处理。到目前为止,我只在纯C中使用过它,但现在我需要使用C++来创建一些基本的OCR。
我首先创建了一个.h/.cpp文件,它似乎编译得很好。但我需要将其与一些Objective-C混合来打开图像等等。然后我将文件重命名为.mm,而不是.cpp,但它无法编译!
我收到以下错误:OpenCV core.hpp第432行中的"语句表达式只允许在函数内部"
432行是这行:
typedef Matx<_Tp, MIN(m, n), 1> diag_type;
你知道为什么会发生这种事吗?
我遇到了同样的问题。我在UIKit标头之前导入了Open CV标头。请确保在pch文件中执行此操作。问题在于UIKit和OpenCV中都定义了一些宏。
来源:http://computer-vision-talks.com/2011/01/using-opencv-in-objective-c-code/
Maunil
我实际上依赖于这个家伙提供的私有框架(和示例项目):http://aptogo.co.uk/2011/09/opencv-framework-for-ios/
我设法在我的Objective-C mac应用程序中使用了他在示例中使用的相同方法。也就是说,在.PCH文件中使用import指令,以及对依赖于任何OpenCV C++代码/类的Objective-C文件使用.mm。
至少在xcode 4.5中,另一件(无关的?)值得一提的事情是,您必须在目标设置中将C++标准库更改为"libstdc++",才能编译openCV。
OpenCV标头必须包含在UIKit.h和Foundation.h之前,因为OpenCV定义的MIN宏与Apple框架定义的MIN函数冲突。如果在UIKit.h和Foundation.h之后包含OpenCV标头,则会收到编译错误,例如"LLVM GCC 4.2错误:语句表达式只允许在函数内部"。首先包括OpenCV标头,并使用__cplusplus条件测试围绕#import避免了这个问题,这意味着您仍然可以对项目中不调用OpenCV API的".m"文件使用纯Objective-C。
http://aptogo.co.uk/2011/09/opencv-framework-for-ios/