Xcode 转换为&;来自OpenCV::Mat,NSImage

Xcode 转换为&;来自OpenCV::Mat,NSImage,xcode,cocoa,opencv,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&)cvMa

有一篇文章描述了如何做到这一点,这篇文章似乎对其他人有用,但它不适合我

以下是使用的.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
//
//NSImage+OpenCV.h
//
#进口
@接口NSImage(NSImage_OpenCV){
}
+(NSImage*)带有cvMat的图像:(常数cv::Mat&)cvMat;
-(id)initWithCVMat:(const cv::Mat&)cvMat;
@属性(非原子,只读)cv::Mat CVMat;
@属性(非原子,只读)cv::Mat CVGrayscaleMat;
@结束
我使用的是Xcode 4.4,使用的是openCV 2.4.2。我得到的头文件编译器错误是以下错误的4倍:

语义问题:使用未声明的标识符“cv”

这个错误似乎相当明显…头文件没有定义什么是cv::Mat。 因此,我从OpenCV 2.4教程中猜出了一个需要添加的内容

#包括

这产生了20个其他错误,其中编译器抱怨core.hpp文件。 第一条说:

语义问题:非常量静态数据成员的初始化必须越行


所以我的问题是我做错了什么?我如何让这个代码工作?< /P> < P>这是C++语法。您必须为源文件提供
.mm
后缀,使其成为Objective-C++。

另一个stackoverflow Q&A(链接:)在未定义的符号上有缺失的部分

总结如下:

  • 由于宏冲突,OpenCV头必须包含在Cocoa头之前
  • Xcode会自动在每个objective-C文件(*.m,*.mm)的顶部包含cocoa头,这会阻止您首先添加OpenCV头,如第1点所述
  • Xcode有一个“-Prefix.pch”文件,它定义了自动添加到任何代码前面的任何代码 通常,它看起来像:

    #ifdef __OBJC__
        #import <Cocoa/Cocoa.h>
    #endif
    
    #ifdef_uuobjc__
    #进口
    #恩迪夫
    
    相反,应将文件更改为如下所示:

    #ifdef __cplusplus
    #import <opencv2/opencv.hpp>
    #endif
    
    #ifdef __OBJC__
        #import <Cocoa/Cocoa.h>
    #endif
    
    \ifdef\uuucplusplus
    #进口
    #恩迪夫
    #ifdef__OBJC__
    #进口
    #恩迪夫
    
    因此,对于任何*.cpp文件,opencv头都会自动添加。对于任何*.m文件,都会添加Cocoa头。在*.mm文件的特殊情况下,它们都会以正确的顺序添加


    伊恩·查纳斯(Ian Charnas)和用户671435(user671435)发现了这一点,我对此表示感谢。

    我已经做到了。编译器可以识别语法,但不能识别未定义的符号“cv”和“Mat”。您的回答帮助我解决了xcode中的大多数错误,但在我完成上述操作后,lsh_table.h“语义问题:使用未声明的标识符‘Use_speed’”中仍有一个错误。你知道我该怎么摆脱它吗?谢谢