在iOS下使用Stitcher时出现OpenCV编译器错误

时间:2012-11-04 20:38:31

标签: ios opencv compiler-construction

每当我尝试在iOS中使用OpenCV Stitcher类并且我包含stitcher-header(#include)时,我最终会在exposure_compensate.hpp中出现编译错误“Expected'{'”。显然是这条线     枚举{NO,GAIN,GAIN_BLOCKS}; 导致某种错误。

我是openCV的新手,但使用filter2d()等其他函数按预期工作。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:11)

尝试

#import <opencv2/opencv.hpp>

然后

#import <UIKit/UIKit.h>

答案 1 :(得分:4)

在您的项目中,创建一个Prefix Header,MyProject.pch,并将其设置在项目的构建设置中。

然后在该pch文件中,执行以下操作:

#ifdef __cplusplus
#   include <opencv2/opencv.hpp>
#   include <opencv2/stitching/detail/blenders.hpp>
#   include <opencv2/stitching/detail/exposure_compensate.hpp>
#else
#   import <Foundation/Foundation.h>
#   import <UIKit/UIKit.h>
#   import <Availability.h>
#endif

答案 2 :(得分:2)

我通过在OpenCV之前导入任何Apple标头解决了这个问题,如标题开头所述:

#if defined(NO)
#  warning Detected Apple 'NO' macro definition, it can cause build conflicts. Please, include this header before any Apple headers.
#endif

希望有所帮助。

答案 3 :(得分:1)

我也遇到了这个问题。正如G.Führ所确保您首先包含opencv标头。最简单的方法是添加:

#ifdef __cplusplus
#include <opencv2/opencv.hpp>
#endif

靠近应用程序“Appname-Prefix.pch”标题的顶部。这是一个预编译的头文件,可以很容易地保证在任何apple标头之前包含opencv头文件。

//
//  Prefix header
//
//  The contents of this file are implicitly included at the beginning of every source file.
//

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __cplusplus
#include <opencv2/opencv.hpp>
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

这意味着您不会在应用程序的任何其他位置之前意外包含苹果标题。

答案 4 :(得分:0)

我有一个类似的问题,我解决了直接编辑涉及的opencv-framework文件(在您的情况下为compensate.hpp)并从其中注释了NO枚举案例定义的定义。在这种情况下,文件为blender.hpp,但是compensate.hpp具有相同的结构

希望这会有所帮助