问题描述
|
我正在编写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/
毛尼尔
,我实际上依赖于此人提供的私有框架(和示例项目):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。
,必须在UIKit.h和Foundation.h之前包含OpenCV标头,因为OpenCV定义了一个MIN宏,该宏与Apple框架定义的MIN函数冲突。如果在UIKit.h和Foundation.h之后包含OpenCV标头,则会收到诸如“ LLVM GCC 4.2错误:仅在函数内部允许语句表达式”之类的编译错误。首先包含OpenCV标头,并在__cplusplus条件测试中包含#import可以避免此问题,这意味着您仍可以将普通的Objective-C用于项目中未调用OpenCV API的'.m'文件。
http://aptogo.co.uk/2011/09/opencv-framework-for-ios/