问题标签 [vimage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
195 浏览

ios - 在 Swift 中快速 UInt 到 Float 转换

我正在对实时视频流进行一些实时图像分析。我正在使用 vImage 来计算直方图和 vDSP 以进行进一步处理。我有多年来一直运行良好的 Objective-C 代码。我现在要把它转换成 Swift。虽然它有效,但它太慢了。我发现主要问题是将 vImage 直方图(即 UInt (vImagePixelCount))转换为 vDSP 可以处理的浮点数。在 Objective-C 中,我使用 vDSP 进行转换:

但是,vImage 直方图是 UInt,而不是 UInt32,所以我不能在 Swift 中使用 vDSP_vfltu32。相反,我正在使用

问题是这段代码比 Objective-C 版本慢了 100 多倍。有没有更快的替代品?

0 投票
1 回答
369 浏览

ios - 我无法让 vImage(加速框架)将 420Yp8_Cb8_Cr8(平面)转换为 ARGB8888

我正在尝试将 Planar YpCbCr 转换为 RGBA,但失败并出现错误 kvImageRoiLargerThanInputBuffer。我尝试了两种不同的方法。这是一些代码片段。注意“thumbnail_buffers + 1”和“thumbnail_buffers + 2”的宽度和高度是“thumbnail_buffers + 0”的一半,因为我正在处理 4:2:0 并且具有 (1/2)*(1/2) 一样多的色度每个样本作为亮度样本。这静默失败(即使我要求解释(kvImagePrintDiagnosticsToConsole)。

所以我再次尝试使用 vImageConvert_AnyToAny:

我得到了同样的错误,但这次我将以下消息打印到控制台。

但这对我来说没有任何意义。当我有 4:2:0 数据时,我的 Cb 高度怎么可能是 Yp 高度的一半(与我的 dest RGB 高度相同)?(宽度也是如此?)我到底做错了什么?我还将进行其他转换(4:4:4、4:2:2 等),因此我们将不胜感激任何对这些 API 的澄清。此外,我的站点应该用于这些转换吗?上面我使用了 kCVImageBufferChromaLocation_Center。那是对的吗?

一些新信息: 自从发布此信息后,我看到了一个明显的错误,但修复它并没有帮助。请注意,在上面的 vImageConvert_AnyToAny 案例中,我只使用图像宽度而不是 4*width 来初始化目标缓冲区,以便为 RGBA 腾出空间。应该是这个问题吧?没有。

进一步注意,在 vImageConvert_* 案例中,我根本没有初始化目标缓冲区。也解决了这个问题,但没有帮助。

到目前为止,我已经尝试了六种不同的转换方式,从 (vImageConvert_* | vImageConvert_AnyToAny) 中选择一种,从 (kvImage420Yp8_Cb8_Cr8 | kvImage420Yp8_CbCr8 | kvImage444CrYpCb8) 中选择一种,每次都输入适当数量的输入缓冲区——仔细检查缓冲区是否考虑在内每个平面每个像素的样本数。每次我得到:

这对我来说毫无意义。如果我的亮度平面是 100 宽,我的 RGBA 缓冲区应该是 400 宽。请从 YCC 到 RGBA 的任何指导或工作代码将不胜感激。

0 投票
1 回答
152 浏览

ios - 通过 vImage 提取图像通道有副作用

我正在尝试使用vImageConvert_ARGB8888toPlanar8API 来提取 RGB 通道。假设以下是来自: httpsinputImage ://www.solidbackgrounds.com/images/1080x1920/1080x1920-white-solid-color-background.jpg的纯白色图像

这是我的代码:

这就是我得到的:

问题:0如果图像应该是纯白色(即所有像素值 = 255?),我怎么会得到像素值?

另请注意,如果我使用 Xcode 的模拟器运行上面的代码,我会得到不同数量的Pixel Val 0,但总数capacity仍然是2073600.

0 投票
1 回答
65 浏览

ios - 将 vImage_Scale 与 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange 一起使用

CMSampleBuffer从 iPhone 的前置摄像头收到一个。目前它的尺寸是 1920x1080,我想把它缩小到 1280x720。我想使用 vImageScale 函数,但无法正常工作。相机的像素格式是kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,所以我尝试了以下方法,但它输出了一个不正确的奇怪绿色图像:

这里出了什么问题?在这里查看这个答案,看来我需要分别缩放“Y”和“UV”平面。我怎样才能快速做到这一点,然后将它们组合回一个 CVPixelBuffer?

0 投票
2 回答
107 浏览

swift - 获取 CGImage Swift 的所有像素的 RGBA 值

我正在尝试创建一个实时视频处理应用程序,其中我需要获取每个帧的所有像素的 RGBA 值,并使用外部库处理它们,并显示它们。我正在尝试获取每个像素的 RGBA 值,但是我这样做的方式太慢了,我想知道是否有一种方法可以使用VImage更快地做到这一点。这是我当前的代码,也是我获取所有像素的方式,因为我得到了当前帧:

这是使用 VImage 的版本,但我有一些内存泄漏,我无法访问像素