最近有一个获取Vuforia 框架下摄像头的帧图片的需求就研究了一下,其实官方是有相关API的,里面有java和c++两种语言

https://library.vuforia.com/articles/Solution/Working-with-the-Camera#How-To-Access-the-Camera-Image-in-Native

(有一点不好的是,官方给的地址会变,以前的版本和现在的版本地址都不一样)vuforia里面的图片格式有两种,RGB565和RGB888

RGB888

首先需要在start出现的地方设置图片格式setFrameFormat(startCamera和resumeAR中)

        if (!Vuforia::CameraDevice::getInstance().start()) {[self NSErrorWithCode:E_STARTING_CAMERA error:error];return NO;}Vuforia::setFrameFormat(Vuforia::RGB888, true);

然后vuforia_onUpdate函数中添加下面的代码

- (void) Vuforia_onUpdate:(Vuforia::State *) state {Vuforia::Image *imageRGB888 = NULL;Vuforia::Frame frame = state->getFrame();for (int i = 0; i < frame.getNumImages(); ++i) {const Vuforia::Image *image = frame.getImage(i);if (image->getFormat() == Vuforia::RGB888) {imageRGB888 = (Vuforia::Image*)image;break;}}if (imageRGB888) {int width = imageRGB888->getWidth();int height = imageRGB888->getHeight();int bitsPerComponent = 8;int bitsPerPixel = Vuforia::getBitsPerPixel(Vuforia::RGB888);int bytesPerRow = imageRGB888->getBufferWidth() * bitsPerPixel / bitsPerComponent;CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, imageRGB888->getPixels(), Vuforia::getBufferSize(width, height, Vuforia::RGB888), NULL);CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);UIImage *result = [UIImage imageWithCGImage:imageRef];//得到UIImageCGDataProviderRelease(provider);CGColorSpaceRelease(colorSpaceRef);CGImageRelease(imageRef);}if ((self.delegate != nil) && [self.delegate respondsToSelector:@selector(onVuforiaUpdate:)]) {[self.delegate onVuforiaUpdate:state];}
}

RGB565

首先需要在start出现的地方设置图片格式(startCamera和resumeAR中用到了start)

        if (!Vuforia::CameraDevice::getInstance().start()) {[self NSErrorWithCode:E_STARTING_CAMERA error:error];return NO;}Vuforia::setFrameFormat(Vuforia::RGB565, true);

然后vuforia_onUpdate函数中添加下面的代码

- (void) Vuforia_onUpdate:(Vuforia::State *) state {Vuforia::Image *imageRGB565 = NULL;Vuforia::Frame frame = state->getFrame();for (int i = 0; i < frame.getNumImages(); ++i) {const Vuforia::Image *image = frame.getImage(i);if (image->getFormat() == Vuforia::RGB565) {imageRGB565 = (Vuforia::Image*)image;break;}}if (imageRGB565) {int width = imageRGB565->getWidth();int height = imageRGB565->getHeight();const size_t bufferLength = width * height * 2;const short* pixels = (const short*) imageRGB565->getPixels();NSData *data = [NSData dataWithBytes:pixels length:bufferLength];CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);NSLog(@"bits per pixel %d",Vuforia::getBitsPerPixel(Vuforia::RGB565));// Creating CGImage from cv::MatCGImageRef imageRef = CGImageCreate(width,          //widthheight,         //height5,              //bits per componentVuforia::getBitsPerPixel(Vuforia::RGB565),             //bits per pixelwidth * 2,      //bytesPerRowcolorSpace,     //colorspacekCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder16Little,// bitmap infoprovider,               //CGDataProviderRefNULL,                   //decodefalse,                  //should interpolatekCGRenderingIntentDefault   //intent);// Getting UIImage from CGImageUIImage *finalImage = [UIImage imageWithCGImage:imageRef];CGImageRelease(imageRef);CGDataProviderRelease(provider);CGColorSpaceRelease(colorSpace);}if ((self.delegate != nil) && [self.delegate respondsToSelector:@selector(onVuforiaUpdate:)]) {[self.delegate onVuforiaUpdate:state];}
}

但是需要注意的是用RGB888转换成的UIImage是正常的,而RGB565转成的UIImage是非正常的,因为正常的RGB24是由24位即3个字节来描述一个像素,R、G、B各8位。而实际使用中为了减少图像数据的尺寸,如视频领域,对R、G、B所使用的位数进行的缩减,如RGB565和RGB555。
RGB565 就是R-5bit,G-6bit,B-5bit
RGB555 就是R-5bit,G-5bit,B-5bit

RGB888 就是R-8bit,G-8bit,B-8bit

使用RGB565,会导致图片数据的缺失,影响精度,在前端显示的时候还是建议用RGB888

iOS AR 高通Vuforia —— 获取摄像头帧图片相关推荐

  1. iOS AR 高通Vuforia —— 更换teapot模型

    接入高通AR之后不管识别什么都是teapot茶壶模型,就试着换了一个 第一步 h文件 在https://free3d.com/3d-models/中下载一个免费的3D模型,然后把obj2opengl. ...

  2. ios for 高通Vuforia图像识别+AR(二)

    补一下高通vuforia的官方地址:https://developer.vuforia.com/ 在demo好用之后一下不就是着手改demo,首先改的是识别的图片 在develop选项卡中有一个tar ...

  3. ios for 高通Vuforia图像识别+AR(一)

    从头学.... 第一步当然是从官方的demo开始看了 在这里下载https://developer.vuforia.com/downloads/sdk 下载sdk和demo(samples) 把两个z ...

  4. [ios版本]AR 现实增强之高通Vuforia QCAR SDK (一)

    [ios版本]AR 现实增强之高通Vuforia QCAR SDK (一) 古人常曰饮水思源,知恩图报.由于近期工作需要,需要学习AR和图像识别.但是国内资料真的很少,基本都是拷贝粘贴.为数不多有用的 ...

  5. [ios版本]AR 现实增强之高通Vuforia QCAR SDK (二)

    [ios版本]AR 现实增强之高通Vuforia QCAR SDK (二) 这章会比较简单.就是换上麦叔叔,不是肯叔叔的logo,然后对着丫照啊照,就能看到茶壶了.为啥是茶壶不是汉堡?因为我没找到汉堡 ...

  6. (Android版)AR 现实增强 高通 Vuforia QCAR SDK学习笔记(一)

    望集齐大家的力量,将AR(增强现实)发展壮大. PS:不是我不加链接,是我加了超链接,没有用啊,难道是我权限不够,只得自己复制.粘贴了 1.下载高通SDK(高通刚刚才更新开发中心地址,版本更新为V2. ...

  7. AR!!!高通Vuforia-iOS-SDK 和官方Demo 集成到iOS 项目中所需要注意的几点.

    AR!!!高通Vuforia-iOS-SDK 和官方Demo 集成到iOS 项目中所需要注意的几点. 首先,要说明一下,博主是一名AR小白,根据公司的计划,要我往Vuforia iOS原生 + 项目i ...

  8. 高通Vuforia AR增强现实之多卡识别和扩展追踪

           只要你仔细了解高通AR,你就不难发现实现多卡识别是一件很轻松的事情,只要你修改ARcamera上的Max Simutaneous Tracked Images的值就可以实现了,他的初始值 ...

  9. [ios版本]AR 现实增强之高通Vuforia

    古人常曰饮水思源,知恩图报.由于近期工作需要,需要学习AR和图像识别.但是国内资料真的很少,基本都是拷贝粘贴.为数不多有用的信息就是一篇关于高通的库,但是是安卓版本的.有兴趣的自己过去看下,由于我需要 ...

最新文章

  1. Excel提取超链接信息
  2. 推荐系统评价指标综述
  3. nginx 配置upstream实现负载均衡
  4. appscan 下载
  5. echarts全国地图显示到城市级别
  6. 边沿触发是什么意思_边沿触发器的动作特点及主要特点
  7. Python3.5爬取cbooo.cn数据并且同步到mysql中
  8. IDEA卸载和删除注册表
  9. 关系型数据库的ACID指的是什么?
  10. 巴菲特致股东的信pdf_巴菲特历年股东大会股东信问答实录集合(共7份)
  11. MTCNN训练数据整理
  12. k8s免fq下载镜像
  13. 解决 M1 MAC安装软件提示来自身份不明开发者
  14. mysql先过滤后分组_MySQL分组过滤
  15. 超百万观众同场看直播流畅不卡顿,快手如何做到的?|首次披露
  16. 雷军给陈年总结的小米十条经验
  17. S3C2410的触摸屏控制
  18. flask获取参数类型和请求响应
  19. JSP+SQL基于JSP的学生信息管理系统(源代码+论文+答辩PPT)
  20. MySQL各种引擎特点简述

热门文章

  1. Python正则表达式 re 用法
  2. Springboot 我随手封装了一个万能的导出excel工具,传什么都能导出
  3. ubuntu安装PGI以及问题解决
  4. 怎样查询快递单号物流,快速查询物流信息
  5. 七、CSS背景(background简写)
  6. 小学算术自动出题c语言,【小学算术随机出题器】小学算术随机出题器电脑版下载 v0.7 吾爱版-趣致软件园...
  7. java开发环境(sts,eclipse等等)解决项目上的红叉和红色感叹号的方法。
  8. 【Windows11】【3050Ti显卡】下进行PaddleDetetion安装指南
  9. wsyoneself的一周年创作纪念日
  10. 云计算ACP和大数据ACP考试一点心得