问题标签 [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.
ios - vImageMatrixMultiply_ARGB8888ToPlanar8 在构建发布模式 iOS 应用程序时不起作用
我正在开发一个图像处理应用程序并尝试使用 vImage。它工作得很好并且在调试模式下得到了正确的结果。但是,它总是返回黑色图像或在发布模式下引发错误。
我已经尝试过官方示例,当我在发布模式下构建它时也会得到一个黑色图像。
ios - 在 CVImageBuffer 中缩放图像
我有一个任务 - 缩小从相机获得的图像。我需要它来对较小版本的图像进行繁重的操作,这将帮助我节省一些处理能力。
我决定使用vImage_Buffer
from Accelerate
。这是我的代码,几乎没有评论,只是为了清楚地理解那里有什么:
似乎所有操作都在没有任何错误的情况下执行,我想检查缩放是如何进行的,所以我试图创建新UIImage
的缩放缓冲区。但是当我尝试用 显示图像时UIImageView
,出现EXC_BAD_ACCESS
错误。当我尝试保存时UIImage
,一切都没有错误,但目录中没有文件出现Documents
。你能指出我在这里到底做错了什么吗?谢谢!
ios - 如何为 YCbCr 图像创建 vImage_CGImageFormat?
我想创建一个库,可以将使用AVCaptureDevice捕获的任何视频帧转换为目标像素格式。因此,它必须支持kCVPixelFormatType_32BGRA
,kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
和kCVPixelFormatType_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_GetNumberOfSourceBuffers和vImageConverter_GetSourceBufferOrder。在最后一个函数中,有许多vImage 缓冲区类型代码,甚至kvImageBufferTypeCode_CVPixelBuffer_YCbCr
.
所以,看起来可以为 YCbCr 创建 vImageConverter,我需要帮助来了解如何去做。
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 库的调试版本?我能做些什么来阻止这些功能吸走我所有宝贵的周期吗?
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 像素缓冲区。
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 的例子。
objective-c - 使用偏移量缩放 vImage_Buffer - Cocoa Objective C
我正在尝试使用 vImage_Buffer 缩放图像,下面的代码对我有用。我的麻烦是我想保持源图像的纵横比,所以我可能需要添加一个xOffset
or yOffset
。以下代码仅适用于yOffset
. 我如何也可以缩放图像xOffset
。我无法进行缩放,CGContext
因为这会影响性能。
ios - 操作 CVPixelbuffer、vImage、CGImage 和 UIImage 进行旋转
我从 AR 会话中得到当前帧:self.sceneView.session.currentFrame?.capturedImage
所以我得到一个 CVPixelBuffer 和我的图像信息。
我按照此链接将我的 CVPixelBuffer 转换为 CGImage。(我使用以前createCGImage
的方法,但这种方法会在我的应用程序中创建内存泄漏。)
但是我现在有一个问题,最后收到的 CGImage 是横向模式而不是纵向模式(我的应用程序只允许纵向模式),如下图所示。
所以我正在尝试修复这种旋转。我看到vImageRotate90_ARGB8888(_:_:_:_:_:)
存在,但我无法使用它,因为我的 backColor 指针始终为零。
你有什么方法可以在没有内存泄漏的情况下旋转它,因为我必须每秒旋转几次?
谢谢