wrj*_*hns 2 xcode cocoa opencv
有一篇文章描述了如何在这里做到这 一点,这似乎对其他人有用,但它不能为我编译.
这是使用的.h文件的副本:
//
// NSImage+OpenCV.h
//
#import <AppKit/AppKit.h>
@interface NSImage (NSImage_OpenCV) {
}
+(NSImage*)imageWithCVMat:(const cv::Mat&)cvMat;
-(id)initWithCVMat:(const cv::Mat&)cvMat;
@property(nonatomic, readonly) cv::Mat CVMat;
@property(nonatomic, readonly) cv::Mat CVGrayscaleMat;
@end
Run Code Online (Sandbox Code Playgroud)
我使用openCV 2.4.2在Xcode 4.4上.我为头文件获得的编译器错误是以下4倍:
Semantic issue: Use of undeclared identifier 'cv'
这个错误似乎很明显......头文件没有定义cv :: Mat是什么.所以我看了一下我需要添加的OpenCV 2.4教程
#include <opencv2/core/core.hpp>
这产生了20个其他错误,编译器抱怨core.hpp文件.第一个说:
Semantic issue: Non-const static data member must be initialized out of line
所以我的问题是我做错了什么?如何使此代码生效?
另一个stackoverflow Q&A(链接:如何在Cocoa应用程序中包含OpenCV?)在未定义的符号上有缺失的部分.
总结一下:
通常,它看起来像:
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
Run Code Online (Sandbox Code Playgroud)
相反,应该将文件更改为:
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
Run Code Online (Sandbox Code Playgroud)
因此,在任何*.cpp文件的情况下,opencv标头会自动添加.在任何*.m文件的情况下,添加Cocoa头.在*.mm文件的特殊情况下,它们会以正确的顺序添加.
感谢Ian Charnas和user671435搞清楚这一点.