gpt4 book ai didi

objective-c - 我将如何在 objC 中实现 SURF?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:19:30 26 4
gpt4 key购买 nike

我需要在 objc iOS 中实现 SURF 算法。我在 openCV 上搜索过并尝试实现以下示例

jonmarimbaishai jaffe

示例不工作,我需要让其中任何一个工作,这样至少我可以放心,是的,SURF 也可以在 iOS 上工作。我曾尝试从头开始构建,但我完全被短路所困扰。

我正在尝试在 jonmarimba 的示例中使用 openCV 2.4.2。

并且还尝试将 iOS5.1.1 与 Xcode 4.3 一起使用

最佳答案

首先:使用 OpenCVs C++ 接口(interface)。 Objective-C 是 C 的严格超集,因此您可以直接使用它。

要了解该主题,请查看 OpenCV 官方 docs以及关于 Feature Description 的示例代码.

下一步是获取适用于 iOS 的当前 OpenCV 版本的副本。自版本 2.4.2 OpenCV has official iOS-support 起而您只需要 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 Stuff。喝杯咖啡开始工作吧。

如果您需要一些“灵感”,请查看此存储库 gsoc2012 - /ios/trunk它专用于 OpenCV + iOS。

关于objective-c - 我将如何在 objC 中实现 SURF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com