2

objciOSにSURFアルゴリズムを実装する必要があります。私はopenCVを検索し、次の例も実装しようとしました

ジョンマリンバイシャイジャッフェ

例は機能しておらず、少なくともいずれかを機能させる必要があります。そうすれば、SURFはiOSでも機能するので安心できます。ゼロから構築しようとしましたが、SHORTCIRCUITと完全に融合しています。

jonmarimbaの例でopenCV2.4.2を使用しようとしています。

また、Xcode4.3でiOS5.1.1を使用しようとしています

4

1 に答える 1

6

まず第一に:OpenCVsC++インターフェースを使用します。Objective-CはCの厳密なスーパーセットであるため、そのまま使用できます。

このトピックを把握するには、OpenCVの公式ドキュメントと機能の説明に関するサンプルコードをご覧ください。

次のステップは、iOS用の現在のOpenCVバージョンのコピーを取得することです。バージョン2.4.2の時点で、OpenCVは公式のiOSサポートを備えており、必要なのはopencv2.frameworkだけです。

UIImageをcv::Matに変換するには、次の関数を使用します。

static UIImage* MatToUIImage(const cv::Mat& m) {
    CV_Assert(m.depth() == CV_8U);
    NSData *data = [NSData dataWithBytes:m.data length:m.elemSize()*m.total()];
    CGColorSpaceRef colorSpace = m.channels() == 1 ?
        CGColorSpaceCreateDeviceGray() : CGColorSpaceCreateDeviceRGB();
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
    // Creating CGImage from cv::Mat
    CGImageRef imageRef = CGImageCreate(m.cols, m.cols, m.elemSize1()*8, m.elemSize()*8,
        m.step[0], colorSpace, kCGImageAlphaNoneSkipLast|kCGBitmapByteOrderDefault,
        provider, NULL, false, kCGRenderingIntentDefault);
    UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef); CGDataProviderRelease(provider);
    CGColorSpaceRelease(colorSpace); return finalImage;
}

… およびその逆:

static void UIImageToMat(const UIImage* image, cv::Mat& m) {
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
    CGFloat cols = image.size.width, rows = image.size.height;
    m.create(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
    CGContextRef contextRef = CGBitmapContextCreate(m.data, m.cols, m.rows, 8,
        m.step[0], colorSpace, kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault);
    CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
    CGContextRelease(contextRef); CGColorSpaceRelease(colorSpace);
}

あなたがしなければならない残りの仕事は、単純なOpenCVのものです。だからあなたにコーヒーを飲んで働き始めなさい。

「インスピレーション」が必要な場合は、このリポジトリをご覧ください。gsoc2012-/ ios / trunk OpenCV+iOS専用です。

于 2012-07-06T12:03:30.483 に答える