如何将 YUV 转换为 iOS 的 CIImage

2023-11-29

我正在尝试将 YUV 图像转换为 CIIMage 并最终转换为 UIImage。我在这些方面相当新手,并试图找出一种简单的方法来做到这一点。据我所知,从 iOS6 开始,YUV 可以直接用于创建 CIImage,但当我尝试创建它时,CIImage 仅保留一个 nil 值。我的代码是这样的->

NSLog(@"Started DrawVideoFrame\n");

CVPixelBufferRef pixelBuffer = NULL;

CVReturn ret = CVPixelBufferCreateWithBytes(
                                            kCFAllocatorDefault, iWidth, iHeight, kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,
                                            lpData, bytesPerRow, 0, 0, 0, &pixelBuffer
                                            );

if(ret != kCVReturnSuccess)
{
    NSLog(@"CVPixelBufferRelease Failed");
    CVPixelBufferRelease(pixelBuffer);
}

NSDictionary *opt =  @{ (id)kCVPixelBufferPixelFormatTypeKey :
                      @(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) };

CIImage *cimage = [CIImage imageWithCVPixelBuffer:pixelBuffer options:opt];
NSLog(@"CURRENT CIImage -> %p\n", cimage);

UIImage *image = [UIImage imageWithCIImage:cimage scale:1.0 orientation:UIImageOrientationUp];
NSLog(@"CURRENT UIImage -> %p\n", image);

这里的lpData是YUV数据,它是一个无符号字符数组。

这看起来也很有趣:vImageMatrix乘法,找不到任何这方面的例子。谁能帮我这个?


我也遇到过这个类似的问题。我试图将 YUV(NV12) 格式的数据显示到屏幕上。该解决方案正在我的项目中运行...

//YUV(NV12)-->CIImage--->UIImage Conversion
NSDictionary *pixelAttributes = @{kCVPixelBufferIOSurfacePropertiesKey : @{}};
CVPixelBufferRef pixelBuffer = NULL;

CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,
                                      640,
                                      480,
                                      kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
                                      (__bridge CFDictionaryRef)(pixelAttributes),
                                      &pixelBuffer);

CVPixelBufferLockBaseAddress(pixelBuffer,0);
unsigned char *yDestPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);

// Here y_ch0 is Y-Plane of YUV(NV12) data.
memcpy(yDestPlane, y_ch0, 640 * 480); 
unsigned char *uvDestPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1);

// Here y_ch1 is UV-Plane of YUV(NV12) data. 
memcpy(uvDestPlane, y_ch1, 640*480/2);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

if (result != kCVReturnSuccess) {
    NSLog(@"Unable to create cvpixelbuffer %d", result);
}

// CIImage Conversion    
CIImage *coreImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];

CIContext *MytemporaryContext = [CIContext contextWithOptions:nil];
CGImageRef MyvideoImage = [MytemporaryContext createCGImage:coreImage
                                                    fromRect:CGRectMake(0, 0, 640, 480)];

// UIImage Conversion
UIImage *Mynnnimage = [[UIImage alloc] initWithCGImage:MyvideoImage 
                                                 scale:1.0 
                                           orientation:UIImageOrientationRight];

CVPixelBufferRelease(pixelBuffer);
CGImageRelease(MyvideoImage);

Here I am showing data structure of YUV(NV12) data and how we can get the Y-Plane(y_ch0) and UV-Plane(y_ch1) which is used to create CVPixelBufferRef. Let's look at the YUV(NV12) data structure.. enter image description here If we look at the picture we can get following information about YUV(NV12),

  • 总框架尺寸=宽度*高度*3/2,
  • Y 平面尺寸 = 框架尺寸 * 2/3,
  • UV 平面尺寸 = 框架尺寸 * 1/3,
  • 数据存储在Y平面-->{Y1, Y2, Y3, Y4, Y5.....}。
  • U 平面-->(U1, V1, U2, V2, U3, V3,......}。

希望对大家有所帮助。 :) 享受 IOS 开发的乐趣 :D

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 YUV 转换为 iOS 的 CIImage 的相关文章

  • 如何使用 Core Graphics 在我的触摸位置绘制一个圆圈?

    新程序员来了 我在尝试使用 Core Graphics 在触摸位置周围绘制描边弧时遇到问题 我有绘制圆圈的方法工作正常 并且我已经测试并在点击屏幕时注册触摸 但是当我尝试在点击时调用绘制圆圈的方法时 我收到错误 CG ContextBlah
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • iOS - 当 UIView 移动时将 UITextField 移动到不同的位置

    我有一个主 UIView 它通过开关向上移动 我有这个工作 那里没有问题 现在 UIView 当向下时 占据屏幕的大约一半 当它向上推时 它会显示底部 40px 在 UIView 中 当它处于向下状态时 它有一个 UITextField 并
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • 在带有 Storyboard 的 XCode 4 中以模态方式推送视图时,出现“对开始/结束外观转换的不平衡调用”警告

    在网上进行了一些研究但没有成功后 我来这里向您询问有关我的警告的问题 实际上 我有一个带有导航控制器的视图 V1 我想在 V1 完成加载时推送模态视图 V2 所以我用performSegueWithIdentifier方法 我正在使用故事板
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 错误:更改核心数据模型后架构armv7的重复符号

    我有一个使用核心数据框架的应用程序 我工作得很好 我刚刚更改了数据模型 向一个实体添加一个属性 当我尝试构建它时 出现错误 duplicate symbol OBJC METACLASS AccountFolder in Users XXX
  • 个人帐户开发者之间的 Apple 开发/分发证书

    我一直在到处寻找有关处理证书的正确答案 想象一下以下帐户 Joe拥有个人 Apple 帐户 但他根本不会编码 他只是发布了该应用程序并将其称为自己的 Bob还有一个个人 Apple 帐户 Bob 是一位编码专家 Joe 付费让他开发他的第一
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma

随机推荐

  • Spotfire - 自定义小计

    我想根据条件计算 Spotfire 交叉表中的小计并为小计行着色 如下表所示 我想按商店添加除 西瓜 之外的所有行的小计 但在表中显示 西瓜 销售行 请告诉我这是否可行 下面的例子 Cross Table 感谢您的帮助 简短的回答是否定的
  • 如何通过d3js实现svg图案?

    我想通过 d3js 添加一个图案到我的 svg 地图的一些多边形 即有争议的区域 我已经很好地添加了这些地理形状 我还看到原生 svg 中可以使用 svg 图案
  • 我们如何获取 Outlook 收件人的实际电子邮件地址?

    希望对今天困扰我的这个问题能得到一点帮助 Outlook MailItem mail Outlook MailItem Item Outlook Recipients recips mail Recipients string toFiel
  • 创建文件夹时授予完全访问权限

    我有一种情况 我有一个 Windows 应用程序 如果服务器不存在 它会在服务器上创建文件夹 然后我会将文件复制到其中 但目前我在指定路径上被拒绝访问 这就是我所拥有的 If Not System IO Directory Exists s
  • 通过套接字发送大文件

    我有一个视频文件 想通过套接字发送它 视频已发送到客户端 但视频无法播放 并且收到的视频大小为 2 KB 准确地说 视频大小为 43 MB 问题是什么 Server import socket try soc socket socket p
  • 如何模拟修改私有变量的私有方法?

    如何模拟修改私有变量的私有方法 class SomeClass private int one private int second public SomeClass public int calculateSomething comple
  • 如何获取对象当前的引用计数?

    我有一个指向 COM 对象的指针 在 C 中 有没有办法获取指针所指向的对象的当前引用计数 Call IUnknown AddRef然后立即IUnknown Release 后者返回的值是当前未完成引用的计数 请注意 该值不必准确 它仅供参
  • Jquery AJAX(json)跨域请求与ASP.NET MVC

    在我看来 这是一个被打败的主题 但我找不到答案 我发出 jquery ajax 请求 本地主机 666 来自本地主机 555 应用程序 ajax url http localhost 666 request dataType json ti
  • 如何从多个列表中查找最大值?

    我有多个相同大小的列表 或 numpy 数组 我想返回一个相同大小的数组 每个点都有最大值 例如 A 0 1 0 0 3 0 1 0 0 2 0 3 B 1 0 0 0 0 4 0 5 6 0 1 1 C numpy zeros like
  • 如何从 mySQL 和 PHP 检索结果作为多维数组?

    我刚刚开始学习更高级的 SQL 和 PHP 并且我真的很努力地尝试找出如何查询我的数据库以进行我正在构建的测验 最终 我尝试返回一个具有以下结构的 json 对象 该对象以多维数组的形式提供了问题列表和所有可能的答案 questions q
  • 如何使用c++获取Windows中的系统信息[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想用 C 代码获取我的系统硬件信息 那么如何用c 获取windows中的系统信息呢 您可以使用GetSystemInfo函数获取硬件信息 例如 OEM 标识符 处理器类型 页面
  • 我可以获得从 Scala 中的密封父级派生的所有 case 对象的编译时列表吗?

    正如在 SO 上多次讨论的那样 如果您没有详尽地列出从密封类派生的所有类型 Scala 匹配将会警告您 我想要的是从特定父级派生的案例对象的编译时生成的 Iterable 或者 我很高兴有一种方法可以让编译器告诉我我在某些 Iterable
  • 雷达图上的误差线?

    我正在寻找多变量数据的雷达图 这项任务对于 Excel 来说足够简单 当我还想在此绘制一些误差线时 问题就出现了 据我了解 我无法在Excel中做到这一点 这在 R 上可能吗 或者有人可以建议替代方案吗 我有 32 个单值维度 Thanks
  • 更新 mdb 数据库表

    我正在使用 NET Web Forms 和 mdb数据库作为数据源 问题是 我有一个工作后台 通过它我可以创建 修改和删除新页面 虽然我可以创建和删除 但编辑功能不起作用 我意识到问题可能出在查询中 因为代码对于其他功能运行良好 这是查询
  • C# 异步方法调用一直到 Main

    有人可以澄清这个例子 这当然是行不通的 class Program static void Main string args main cant be async int res test I must put await here Con
  • WPF DataGrid 列:如何管理值更改事件

    在我的 WPF C 项目中 我有一个 Datagrid 如下所示
  • MFMailComposeViewController 外观 setTintColor 迷失 iOS 7

    这个问题是针对运行 iOS 7 的 Xcode 5 的 非常奇怪 我试图将所有 UInavigation 和 UIBarButtonItem 文本颜色设置为白色 因此 在我的应用程序启动委托中 我将代码设置为 BOOL applicatio
  • Any 中的 Swift 转换失败?协议

    仅供参考 这里提出了 Swift 错误 https bugs swift org browse SR 3871 我遇到一个奇怪的问题 强制转换不起作用 但控制台将其显示为正确的类型 我有一个公共协议 public protocol MyPr
  • symfony make:新项目实体崩溃

    每当我尝试使用 bin console make entity 创建实体时 我都会得到以下结果 php bin console make entity Class name of the entity to create or update
  • 如何将 YUV 转换为 iOS 的 CIImage

    我正在尝试将 YUV 图像转换为 CIIMage 并最终转换为 UIImage 我在这些方面相当新手 并试图找出一种简单的方法来做到这一点 据我所知 从 iOS6 开始 YUV 可以直接用于创建 CIImage 但当我尝试创建它时 CIIm