问题标签 [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 回答
189 浏览

ios - vImageMatrixMultiply_ARGB8888ToPlanar8 在构建发布模式 iOS 应用程序时不起作用

我正在开发一个图像处理应用程序并尝试使用 vImage。它工作得很好并且在调试模式下得到了正确的结果。但是,它总是返回黑色图像或在发布模式下引发错误。

我已经尝试过官方示例,当我在发布模式下构建它时也会得到一个黑色图像。

0 投票
1 回答
579 浏览

ios - 在 CVImageBuffer 中缩放图像

我有一个任务 - 缩小从相机获得的图像。我需要它来对较小版本的图像进行繁重的操作,这将帮助我节省一些处理能力。

我决定使用vImage_Bufferfrom Accelerate。这是我的代码,几乎没有评论,只是为了清楚地理解那里有什么:

似乎所有操作都在没有任何错误的情况下执行,我想检查缩放是如何进行的,所以我试图创建新UIImage的缩放缓冲区。但是当我尝试用 显示图像时UIImageView,出现EXC_BAD_ACCESS错误。当我尝试保存时UIImage,一切都没有错误,但目录中没有文件出现Documents。你能指出我在这里到底做错了什么吗?谢谢!

0 投票
2 回答
1191 浏览

ios - 如何为 YCbCr 图像创建 vImage_CGImageFormat?

我想创建一个库,可以将使用AVCaptureDevice捕获的任何视频帧转换为目标像素格式。因此,它必须支持kCVPixelFormatType_32BGRA,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRangekCVPixelFormatType_420YpCbCr8BiPlanarFullRange可选kCVPixelFormatType_420YpCbCr8Planar的 。

为了提高性能,我想使用 Accelerate 框架,因为它包含丰富的转换函数集。由于目标像素格式可能不同并且由库用户设置,因此使用通用vImageConvert_AnyToAny函数会很高兴:

您使用 vImage 的 vImageConvert_AnyToAny( : : : :_:) 函数在任意颜色空间和位深度的 Core Video 或 Core Graphics 图像数据之间进行转换。源图像和目标图像由一个或多个缓冲区描述。例如,Y'CbCr图像可以由一个包含亮度信息的缓冲器和一个包含色度信息的缓冲器组成。

要使用此功能,我必须创建定义图像之间转换的vImageConverter 。此类的构造函数需要vImage_CGImageFormat形式的源和目标图像格式描述:

该代码基于这篇 Apple 文章:构建基本转换工作流程

对于kCVPixelFormatType_32BGRA这样的 vImage_CGImageFormat 很简单,并在vImage_Utilities.h中进行了描述:

我不明白如何为 YCbCr 像素格式创建 vImage_CGImageFormat。

首先,我认为它根本不受支持,但这种格式有特殊功能:Understanding YpCbCr Image Formats and vImageConverter 对多平面图像具有特殊功能,例如vImageConverter_GetNumberOfSourceBuffersvImageConverter_GetSourceBufferOrder。在最后一个函数中,有许多vImage 缓冲区类型代码,甚至kvImageBufferTypeCode_CVPixelBuffer_YCbCr.

所以,看起来可以为 YCbCr 创建 vImageConverter,我需要帮助来了解如何去做。

0 投票
2 回答
210 浏览

macos - GCContextDrawImage 性能不佳,因为它调用了可疑的调试函数

在我的 Mac OS X 应用程序中,对的调用GCContextDrawImage成为一个瓶颈,尤其是在视网膜屏幕上。我设法通过在 blitting 时避免颜色空间转换来缓解它,Mac OS X 10.11 SDK,但它似乎仍然比我预期的要慢。

在使用 Instruments 调查堆栈转储时,我注意到在两个名称非常可疑的函数上花费了大量时间,vImageDebug_CheckDestBuffer即调用_ERROR_Buffer_Write__Too_Small_For_Arguments_To_vImage__CheckBacktrace. 请参阅下面的完整堆栈转储。

在我看来,这像是某种调试断言?我是否在没有意识到的情况下运行 vImage 库的调试版本?我能做些什么来阻止这些功能吸走我所有宝贵的周期吗?

使用 Instruments 捕获的堆栈跟踪

0 投票
1 回答
429 浏览

ios - 有什么方法可以快速从 vImage_Buffer 获取像素格式信息?

我正在使用 vImage_Buffer 进行灰度转换等图像处理。当我将图像转换为灰度时,我需要知道源图像的像素格式,以便我可以为每种颜色应用不同的系数。

换句话说,在这个来自苹果的例子中,我需要将 0.2126 乘以红色,将 0.7152 乘以绿色,将 0.0722 乘以蓝色,以获得像素的灰度值。

但问题是,我不知道如何从现有的 vImage_Buffer 中获取像素格式(ARGB?RGBA?BGRA?...)。甚至文档说 vImage_Buffer 也没有描述它自己的像素格式。

任何想法?

0 投票
1 回答
150 浏览

ios - IOS操作完成后如何释放vImage缓冲区

我尝试在 Accelerate 框架中使用 vImage 缓冲区进行一些直方图计算,并将相机图像作为从 CVpixelbuffer 转换而来的 UIimage 提供。算法正常工作,但屏幕上处理的相机图像数据非常慢。我在 Apple 文档中阅读了一些关于在任务完成时释放缓冲区的信息。抓取缓冲区数据后,我写了两行代码。然而,什么都没有改变。请参阅缓冲区数据释放后的附加屏幕截图。SourceBuffer 和 histogramSourceBuffer 似乎未释放。我不知道如何在调试器中看到空闲缓冲区,但我的缓冲区显示有高度、宽度和数据信息。任何建议如何释放缓冲区以及如何确保它被释放。非常感谢

在此处输入图像描述

0 投票
1 回答
284 浏览

objective-c - 使用 vImageScale_ARGB8888 缩放图像时图像质量受到影响 - Cocoa Objective C

我正在捕获我的系统屏幕,AVCaptureSession然后从捕获的图像缓冲区中创建一个视频文件。它工作正常。

现在我想通过保持视频文件尺寸的纵横比来缩放图像缓冲区。我使用以下代码来缩放图像。

我可以使用上面的代码缩放图像,但与使用预览应用程序调整图像大小相比,最终图像似乎模糊。因为这个视频不清晰。

如果我使用以下代码将输出像素格式更改为 RGB,这将正常工作。

但我想要 YUV 格式的图像缓冲区(这是 的默认格式AVCaptureVideoDataOutput),因为这会在通过网络传输缓冲区时减小缓冲区的大小。

缩放后的图像:

在此处输入图像描述

使用预览应用程序调整大小的图像:

在此处输入图像描述

我尝试使用vImageScale_CbCr8而不是,vImageScale_ARGB8888但生成的图像不包含正确的 RGB 值。

我还注意到有转换图像格式的功能:vImageConvert_422YpCbYpCr8ToARGB8888(const vImage_Buffer *src, const vImage_Buffer *dest, const vImage_YpCbCrToARGB *info, const uint8_t permuteMap[4], const uint8_t alpha, vImage_Flags flags);

但我不知道 vImage_YpCbCrToARGB 和 permuteMap 的值应该是什么,因为我对图像处理一无所知。

预期解决方案:

如何将 YUV 像素缓冲区转换为 RGB 缓冲区并返回到 YUV(或)如何在不影响 RGB 值的情况下缩放 YUV 像素缓冲区。

0 投票
0 回答
102 浏览

objective-c - 如何用颜色填充 vImage 缓冲区 - Cocoa Objective C

我想用黑色填充 VImage 缓冲区。我发现使用vImageBufferFill_ARGB8888(<#const vImage_Buffer *dest#>, <#const uint8_t *color#>, <#vImage_Flags flags#>)我可以填充缓冲区,但我不确定如何传递颜色信息。我是 Mac 开发的新手,我所知道的只是NSColor或者CGColor但这种方法需要以const uint8_t我认为是参考的格式传递颜色信息。有人可以帮我举个例子,因为我在任何地方都找不到用于 Objective C 的例子。

0 投票
1 回答
203 浏览

objective-c - 使用偏移量缩放 vImage_Buffer - Cocoa Objective C

我正在尝试使用 vImage_Buffer 缩放图像,下面的代码对我有用。我的麻烦是我想保持源图像的纵横比,所以我可能需要添加一个xOffsetor yOffset。以下代码仅适用于yOffset. 我如何也可以缩放图像xOffset。我无法进行缩放,CGContext因为这会影响性能。

0 投票
0 回答
172 浏览

ios - 操作 CVPixelbuffer、vImage、CGImage 和 UIImage 进行旋转

我从 AR 会话中得到当前帧:self.sceneView.session.currentFrame?.capturedImage所以我得到一个 CVPixelBuffer 和我的图像信息。

我按照此链接将我的 CVPixelBuffer 转换为 CGImage。(我使用以前createCGImage的方法,但这种方法会在我的应用程序中创建内存泄漏。)

但是我现在有一个问题,最后收到的 CGImage 是横向模式而不是纵向模式(我的应用程序只允许纵向模式),如下图所示。

从 CGImage 生成的 UIImage

所以我正在尝试修复这种旋转。我看到vImageRotate90_ARGB8888(_:_:_:_:_:)存在,但我无法使用它,因为我的 backColor 指针始终为零。

你有什么方法可以在没有内存泄漏的情况下旋转它,因为我必须每秒旋转几次?

谢谢