CIImage 的平均颜色......更快的方法

2024-01-03

我有一个 258x258 的 CIImage。我应用过滤器CIAreaAverage对其进行处理,以获得该图像的平均颜色的绿色值。

我正在使用这个功能来获得......

// channel 0,1,2 = red, green, blue
func averageColorOfImage (_ inputImage: CIImage, _ channel: Int) -> Double {

  let extentVector = CIVector(x: inputImage.extent.origin.x, y: inputImage.extent.origin.y, z: inputImage.extent.size.width, w: inputImage.extent.size.height)

  guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: inputImage, kCIInputExtentKey: extentVector]) else { return 0 }
  guard let outputImage = Static.filter!.outputImage else { return 0 }

  var bitmap = [UInt8](repeating: 0, count: 4)
  let context = CIContext(options: [.workingColorSpace: kCFNull])
  context.render(outputImage, toBitmap: &bitmap, rowBytes: 4, bounds: CGRect(x: 0, y: 0, width: 1, height: 1), format: .RGBA8, colorSpace: nil)

  return Double(bitmap[channel]) / Double(255)
}

它运行得相对较快,但我想看看是否有办法快速获得该颜色。

我记得 Core Image 有这个自定义的“核心过滤器”东西。

有没有办法使用自定义核心滤镜获取图像平均颜色的绿色值?


这就是我要做的。 (实际上,在一个应用程序中创建一个特定大小的恒定颜色 CIImage。

(1) Use CIAreaAverage就像您正在做的那样获得信号像素值。但不是使用绿色通道的输出来创建位图(我相信这是您面临的真正问题)......

(2) 使用 if 作为输入CIConstantColorGenerator,这将创建一个infinite尺寸颜色。然后....

(3) 使用该输出作为输入CICrop并将其裁剪为您想要的尺寸。

本质上,您最终会得到一个“大小”的 CIImage,其颜色为您想要的任何颜色。在下面的代码中,将我的输入替换为inputColor绿色通道输出为CIAreaAverage你会得到它的 640x640 CIImage。

func createNewPalette() {
    let filter = CIFilter(name: "CIConstantColorGenerator")
    filter?.setValue(CIColor(red: 0.7, green: 0.4, blue: 0.4), forKey: "inputColor")
    ciPalette = filter?.outputImage
    let crop = CIFilter(name: "CICrop")
    crop?.setValue(ciPalette, forKey: "inputImage")
    crop?.setValue(CIVector(x: 0, y: 0, z: 640, w: 640), forKey: "inputRectangle")
    ciPaletteOriginal = crop?.outputImage
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CIImage 的平均颜色......更快的方法 的相关文章

随机推荐

  • 我们应该对接口中的默认方法(Java 8)进行单元测试吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对 Java 8 中引入的接口中的默认方法实现感到有点困惑 我想知道我们是否应该专门为接口及其实现的方法编写 JUnit 测试 我尝试用谷歌搜
  • 制作多层程序[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在完成一项任务 需要将我创建的两个程序合并为一个功能程序 我希望的最终结果是一个程序一旦启动 就会打开一个登录窗口 然后一旦登录 用户
  • asp.net mvc 数据表

    如何将数据表传递到 mvc 视图 我将如何在视图中迭代它 在你的控制器中 public ActionResult Index DataTable dt new DataTable return View dt 在您看来 只需将您的模型设为
  • WPF 单独的错误和警告样式

    我们如何以与错误类似的方式向用户显示警告 唯一的区别是控制例如TextBox 需要有一个不同的错误模板 并且与 Validation HasError 类似 需要有一个 Validation HasWarning 换句话说 并非所有验证问题
  • 当 Visual Studio 2013 打开 Web 项目时,IISExpress 提供空页面

    只要我在 Visual Studio 2013 Ultimate 中打开我的 Asp net MVC 3 项目 IISExpress 就开始提供零字节页面 即content length为0 请求体为空 关闭VS 页面就可以正确显示了 我通
  • ASP.NET MVC 计算运输总量

    如何计算 razor html 中的运费总额 第一件商品的运费为 3 99 美元 每件附加商品的运费为 0 99 美元 double itemTotal 0 double subTotal 0 int totalQty 0 double d
  • 如何在一个应用程序中同时使用 jQuery Mobile 和 Backbone JS?

    我一直很喜欢在 iPad HTML5 项目中使用 Backbone JS 但我很快就遇到了需要 iPad 风格的转换 表单元素等的问题 环顾四周后 似乎 jQuery Mobile 是最成熟的 无论如何我们都使用 jQuery 但我很快遇到
  • 如何从 Linux 内核空间向用户空间发送信号以通知输入硬件事件

    我的内核模块代码需要向用户态程序发送信号 以将其执行转移到注册的信号处理程序 事实上 我为我的嵌入式板开发了一个 C 程序 当我按下按钮 输入事件 时 它可以使 LED 打开和关闭 另一方面 我刚刚开发了一个简单的 Linux 模块及其基本
  • 在 bash 中 fork 和 exec

    如何在 bash 中实现 fork 和 exec 让我们假设脚本为 echo Script starts function to fork sleep 5 echo Hello echo Script ends 基本上我希望该函数被称为新进
  • 我的 Youtube API 配额不会在太平洋标准时间 00:00 后重置

    昨天 当我收到包含以下消息的 403 响应时 我正在编写一个脚本来在我的频道上创建和填充播放列表 使用 playlist insert 和 playlistItems insert 该请求无法完成 因为您已经超出了您的权限 href you
  • ASP.NET MVC DropDownListFor 不支持 SelectListItem.Selected

    我在用DropDownListFor在视图中呈现下拉列表 不知怎的 渲染的列表没有选择SelectListItem with Selected set to true 在控制器动作中 var selectList sortedEntries
  • 绘制 pandas 时间序列数据框线性回归线的置信区间

    我有一个示例时间序列数据框 df pd DataFrame year 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 count 96 184 148 154 160 149 1
  • 使用 jQuery 调用远程服务器上的 Web 服务

    我已经在这个问题上停留了几个小时 无法找到有效的答案 也许是因为我缺乏对此类事情的知识 经验 我知道由于同源限制 我无法使用 XMLHttpRequest 在远程服务器上加载 Web 服务 但显然这可以使用 jsonp 数据类型并提供回调函
  • 如何让Python在Excel应用程序打开时更改xlsx文件?

    抱歉 如果我问一个以前可能被问过的问题 但我无法在 Google 和 Stack Overflow 论坛中找到答案 问题与openpyxl用法 因为它是最方便的库xlsx files import openpyxl wb openpyxl
  • 如何用 Java 构建社交图模型

    非常简单的场景 N 个用户 每个用户可以有 0 N 1 个朋友 也是用户 我如何对此进行建模Java对于 App Engine 数据存储区 需要考虑的场景 用户 x 和用户 y 成为朋友 因此都需要在交易中更新自己的状态 我们将用户关系建模
  • postgresql 中的移动平均线

    我的 Postgresql 9 1 数据库中有下表 select from ro date shop id amount 2013 02 07 1001 3 2013 01 31 1001 2 2013 01 24 1001 1 2013
  • Google 日历与 php 同步有两种方式

    我正在创建一个使用 Google Calendar API 的 php 网站 它与创建 更新和删除工作正常 来自 PHP 网站的任何事件在登录后都会进入我的 Google 日历事件 在我的网站上创建的活动是在 Google 日历中创建的 我
  • 使用 JQuery 作为 ASP.NET 嵌入式 Web 资源

    我有一个 ASP NET 服务器控件 它依赖于 JQuery 来实现某些功能 我尝试添加为网络资源 我的问题是我包含 jquery 文件的方法将其添加到正文中 或者确切地说是表单中 this Page ClientScript Regist
  • 如何在 powershell 中使用 xpath 和命名空间访问元素?

    电源外壳 doc new object System Xml XmlDocument doc Load filename items Select Xml Xml doc XPath item items foreach item writ
  • CIImage 的平均颜色......更快的方法

    我有一个 258x258 的 CIImage 我应用过滤器CIAreaAverage对其进行处理 以获得该图像的平均颜色的绿色值 我正在使用这个功能来获得 channel 0 1 2 red green blue func averageC