绘制由 vImage 计算的直方图

Posted

技术标签:

【中文标题】绘制由 vImage 计算的直方图【英文标题】:Draw Histogram computed by vImage 【发布时间】:2018-02-05 18:13:02 【问题描述】:

我使用 vImageHistogramCalculation_ARGB8888(...) 计算了直方图。我现在将三个 RGB 通道中的每一个的直方图数据存储在 256 个 bin 中。我的问题是使用 OpenGLES 或核心图形在 UIView 中绘制这些值的方法是什么?它需要实时完成(至少每秒 30 帧)。

【问题讨论】:

此代码来自 2016 可能帮助:flexmonkey.blogspot.co.uk/2016/05/a-histogram-display-component-in-swift.html 我看到了那个代码,但问题是它单独绘制了三层RGB直方图,没有混合。重叠图层的颜色混合绘制的方法是什么? 【参考方案1】:

你也可以。在每秒 30 帧的情况下,这两种方法都不可能成为问题。

Core Graphics 更简单,所以我会从创建 UIView 的自定义子类开始并覆盖 draw(_:) 方法。

在该方法中,您可以使用 UIBezierPath 或 CGPath 绘制一系列矩形来表示直方图的条形。

试一试,如果遇到困难,请报告。

【讨论】:

如果我使用 UIBezierPath 或 CGPath,如何混合三个 RGB 层的颜色? 您必须为输出中的每个彩色条带创建单独的路径。 我使用了 UIBezierPath,它可以工作,但不能满足我的需要。我不是在尝试 OpenGLES。问题是将 256x1 直方图数据重复传递给着色器的最佳方法是什么? 现在正在尝试使用 OpenGLES? 是的,因为我想合并重叠的颜色。我不知道如何使用 draw(_:)

以上是关于绘制由 vImage 计算的直方图的主要内容,如果未能解决你的问题,请参考以下文章

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

在 swift 中使用 vImageHistogramCalculation 计算图像的直方图

计算绘制图像灰度直方图

使用OpenCV,Numpy计算直方图,Matplot绘制直方图及分析

使用Python,Opencv进行二维直方图的计算及绘制

利用OpenCV的函数calcHist()计算出图像的直方图数据后绘制图像的直方图