gpt4 book ai didi

iphone - 如何在 ARToolKitPlus 中使用 UIImage? (UIImage 到 CVImageBufferRef 的转换)

转载 作者:太空宇宙 更新时间:2023-11-03 21:48:27 25 4
gpt4 key购买 nike

我有两种算法可以检测 AR 标记(ARToolKit 和 Infi)。我让他们在 iPhone 上实时检测标记。在这个阶段,我想比较一下它们的速度和准确性。我想准备一系列图像并对其进行测试识别。我可以用 infi 做到这一点,但我无法设法将 ARToolKit 与 UIImage 一起使用。

ARToolKit 使用 CVImageBuffer 来识别标记:

- (Marker *)detectMarkerInImageBuffer:(CVImageBufferRef)imageBuffer {

/*We lock the buffer and get the address of the first pixel*/
CVPixelBufferLockBaseAddress(imageBuffer,0);
unsigned char *baseAddress = (unsigned char *) CVPixelBufferGetBaseAddress(imageBuffer);
tracker->calc(baseAddress);

如何使用/转换 UIImage 来实现 baseAddress,以便将其发送到 tracker->calc?

使用 infi,我首先从缓冲区创建 IplImage 或将 UIImage 转换为 IplImage,然后在这两种情况下:

Buffer* buffer = new Buffer();

buffer->setBuffer( (unsigned char *) iplImg->imageData, iplImg->width, iplImg->height);

最佳答案

我在这里找到了答案:How do I export UIImage array as a movie?

这就是我要找的

- (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image
{
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVPixelBufferRef pxbuffer = NULL;
CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, frameSize.width,
frameSize.height, kCVPixelFormatType_32ARGB, (CFDictionaryRef) options,
&pxbuffer);
NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL);

CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
NSParameterAssert(pxdata != NULL);

CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
frameSize.height, 8, 4*frameSize.width, rgbColorSpace,
kCGImageAlphaNoneSkipFirst);
NSParameterAssert(context);
CGContextConcatCTM(context, frameTransform);
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);
CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);

CVPixelBufferUnlockBaseAddress(pxbuffer, 0);

return pxbuffer;
}

关于iphone - 如何在 ARToolKitPlus 中使用 UIImage? (UIImage 到 CVImageBufferRef 的转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640716/

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