混合Objective-C和C ++和OpenCV

我正在编写一个iPhone应用程序,我正在使用OpenCV进行一些image processing。 到目前为止,我只用它在纯C中,但现在我需要使用C ++来创build一些基本的OCR。

我第一次创build一个.h / .cpp文件,它似乎编译好。 但是我需要将它与Objective-C混合来打开图像等等。 然后,我将文件重命名为.mm而不是.cpp,但它不会编译!

我在OpenCV core.hpp第432行中得到这个错误:“语句expression式只允许在函数内部”

432行是这一行:

typedef Matx<_Tp, MIN(m, n), 1> diag_type; 

任何想法,为什么这可能发生?

我遇到过同样的问题。 我在UIKit标题之前导入了Open-CV标题。 确保你在pch文件中这样做。 问题是在UIKit和OpenCV中定义了一些macros。

资料来源: 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指令,以及使用.mm作为依赖于任何OpenCV C ++代码/类的Objective-C文件。

另一个(无关的)东西,至less在xcode 4.5中,值得一提的是,你必须在你的目标设置中将你的C ++标准库改为“libstdc ++”来获得openCV来编译。

在UIKit.h和Foundation.h之前必须包含OpenCV头文件,因为OpenCV定义了一个MINmacros,它与Apple框架定义的MIN函数冲突。 如果在UIKit.h和Foundation.h之后包含OpenCV头文件,将会收到编译错误,如“LLVM GCC 4.2错误:语句expression式只允许在函数中使用”。 首先包含OpenCV头文件并且使用__cplusplus条件testing围绕#import文件可以避免这个问题,这意味着您仍然可以在您的项目中使用普通的Objective-C文件来处理未调用OpenCV API的.m文件。

http://aptogo.co.uk/2011/09/opencv-framework-for-ios/