- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个可以按颜色过滤图像的搜索。我的图像模型包含多达 10 个出现在该特定图像中的 UIColors,现在我想要一个过滤器,例如蓝色,绿色,红色,黄色。我如何检查(以指定的容差)该特定图像是否包含蓝色/绿色/...?
我尝试使用 CIE94-difference,但这与人眼感知的相似性不符。我还尝试比较色调和饱和度值,但这也不起作用。
举个例子:
`#23567E` should be blue
`#7A010B` should be red as well as `#FD4E57`
`#0F8801` should be found for green as well as `#85FE97`
UIColor
实例,例如
[UIColor colorWithRed:0.137 green:0.337 blue:0.494 alpha:1] // #23567E
[UIColor colorWithRed:0.478 green:0.00392 blue:0.0431 alpha:1] // #7A010B
最佳答案
如果您只想检查哪种颜色是您的 UIColor,您可以简单地获取您的 HSB 颜色分量并比较其色调值:
您需要一个 helper 来转换您的 hexa string to UIColor
extension UIColor {
convenience init?(hexString: String) {
var chars = Array(hexString.hasPrefix("#") ? hexString.dropFirst() : hexString[...])
switch chars.count {
case 3: chars = chars.flatMap { [$0, $0] }; fallthrough
case 6: chars = ["F","F"] + chars
case 8: break
default: return nil
}
self.init(red: .init(strtoul(String(chars[2...3]), nil, 16)) / 255,
green: .init(strtoul(String(chars[4...5]), nil, 16)) / 255,
blue: .init(strtoul(String(chars[6...7]), nil, 16)) / 255,
alpha: .init(strtoul(String(chars[0...1]), nil, 16)) / 255)
}
}
extension UIColor {
enum Color {
case red, orange, yellow, yellowGreen, green, greenCyan, cyan, cyanBlue, blue, blueMagenta, magenta, magentaRed
}
func color(tolerance: Int = 15) -> Color? {
precondition(0...15 ~= tolerance)
guard let hsb = hsb else { return nil }
if hsb.saturation == 0 { return nil }
if hsb.brightness == 0 { return nil }
let hue = Int(hsb.hue * 360)
switch hue {
case 0 ... tolerance: return .red
case 30 - tolerance ... 30 + tolerance: return .orange
case 60 - tolerance ... 60 + tolerance: return .yellow
case 90 - tolerance ... 90 + tolerance: return .yellowGreen
case 120 - tolerance ... 120 + tolerance: return .green
case 150 - tolerance ... 150 + tolerance: return .greenCyan
case 180 - tolerance ... 180 + tolerance: return .cyan
case 210 - tolerance ... 210 + tolerance: return .cyanBlue
case 240 - tolerance ... 240 + tolerance: return .blue
case 270 - tolerance ... 270 + tolerance: return .blueMagenta
case 300 - tolerance ... 300 + tolerance: return .magenta
case 330 - tolerance ... 330 + tolerance: return .magentaRed
case 360 - tolerance ... 360 : return .red
default: break
}
return nil
}
var hsb: (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)? {
var hue: CGFloat = 0, saturation: CGFloat = 0, brightness: CGFloat = 0, alpha: CGFloat = 0
guard getHue(&hue, saturation: &saturation, brightness: &brightness, alpha: &alpha) else {
return nil
}
return (hue, saturation, brightness, alpha)
}
}
游乐场测试:
let blue: UIColor.Color? = UIColor(hexString: "#23567E").color() // r 0.137 g 0.337 b 0.494 a 1.0
let red1: UIColor.Color? = UIColor(hexString: "#7A010B").color() // r 0.478 g 0.004 b 0.043 a 1.0
let red2: UIColor.Color? = UIColor(hexString: "#FD4E57").color() // r 0.992 g 0.306 b 0.341 a 1.0
let green1: UIColor.Color? = UIColor(hexString: "#0F8801").color() // r 0.059 g 0.533 b 0.004 a 1.0
let green2: UIColor.Color? = UIColor(hexString: "#85FE97").color() // t 0.522 g 0.996 b 0.592 a 1.0
UIColor(hue: 90/360, saturation: 0, brightness: 1, alpha: 1).color() // nil
UIColor(hue: 90/360, saturation: 1, brightness: 0, alpha: 1).color() // nil
UIColor(hue: 90/360, saturation: 0, brightness: 0, alpha: 1).color() // nil
UIColor.black.color() // nil
UIColor.white.color() // nil
UIColor.lightGray.color() // nil
UIColor.darkGray.color() // nil
UIColor.red.color() // 0...15 && 346...360 = red
UIColor.orange.color() // 16...45 = orange
UIColor.yellow.color() // 46...75 = yellow
UIColor(hue: 90/360, saturation: 1, brightness: 1, alpha: 1).color() // 76...105 yellowGreen
UIColor.green.color() // 106...135 = green
UIColor(hue: 150/360, saturation: 1, brightness: 1, alpha: 1).color() // 136...165 greenCyan
UIColor.cyan.color() // 166...195 = cyan
UIColor(hue: 210/360, saturation: 1, brightness: 1, alpha: 1).color() // 196...225 cyanBlue
UIColor.blue.color() // 226...255 = blue
UIColor(hue: 270/360, saturation: 1, brightness: 1, alpha: 1).color() // 256...285 blueMagenta
UIColor.magenta.color() // 286...315 = magenta
UIColor(hue: 330/360, saturation: 1, brightness: 1, alpha: 1).color() // 316...345 = magentaRed
关于swift - 检查颜色是否为蓝色(ish)、红色(ish)、绿色(ish)、,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60047318/
我想实现一个可以按颜色过滤图像的搜索。我的图像模型包含多达 10 个出现在该特定图像中的 UIColors,现在我想要一个过滤器,例如蓝色,绿色,红色,黄色。我如何检查(以指定的容差)该特定图像是否包
问题 Git 中 commit-ish 和 tree-ish 的具体例子是什么? Stack Overflow 问题 "What does tree-ish mean in git?" deals与
如果我需要,比如说,在 asm.js 模块中找到一个数字的整数部分和小数部分,我该怎么做?没有standard operators在 intish 和 doubleish 类型之间转换;即使 Math
我拥有的是一组用户和一组网络,这些用户需要在各种网络上拥有不同的电子邮件地址——有些是内部的,有些是外部的,有些是开发的,而且他们都有自己的命名& 寻址方案。 到目前为止,我所拥有的是简化的,删除了无
我有一个使用 jquery 的 javascript 函数: my.namespace.loadSomeStuff = function() { $.get('/Services/loadSt
首先,这是用于模式匹配的,所以请记住这一点,因为您可能有完全不同的解决方案,我想听听。 我有这一系列数据(暂时称它为 mystring)。 string a = get_starting_letter
我正在尝试在 P5js 中编写一个小型图形可视化工具,但我找不到可遵循的简单(-ish)算法。 我已经找到了使用 D3 来完成此操作的方法,并且我发现了一些密集的教科书片段(如 this ),但我正在
我正在尝试在 P5js 中编写一个小型图形可视化工具,但我找不到可遵循的简单(-ish)算法。 我已经找到了使用 D3 来完成此操作的方法,并且我发现了一些密集的教科书片段(如 this ),但我正在
public static boolean Xish 此方法应按以下顺序接受两个参数:要检查的单词的字符串和由要检查的字母组成的字符串。例如,如果一个单词以任意顺序包含字母 e、l 和 f,则该单词被
整个早上我都在用这个代码撞墙,最后决定来这里寻求帮助。 我有以下标记。 Summary THIS IS AN IMAGE "> 以及下面的 Jquery。 $(".cs").live('click',
所以我正在做一些关于回调函数的练习,我想自己尝试一下,并将它与 setTimeout 方法一起使用,令我惊讶的是,它没有按预期工作。请问我做错了什么在这里。 function first(number
我需要创建可以手动填写并以数字方式阅读的表格。我计划使用一种带有行和列的 scantron 式格式,用户只需在相应单元格的圆圈中着色,计算机就会根据单元格矩阵中的 xy 位置知道该值。就像一个exce
我正在尝试编写一个程序,作为其功能的一部分,它会连续捕获视频并实时或尽可能接近实时地计算给定帧的视频数据的平均亮度。这是我第一次涉足任何视频东西/iOS 相机东西,所以除了我自己的东西之外,我有点把我
我在 mySQL 数据库中有下表(注意:这些是总结的,因此它们与这个问题相关,一些列已被省略)。 author (id, username, password etc.) thread (id, ti
由于我无法控制的原因,我必须将带有一些 Unicode 字符的(英语)文本转换为 ASCII(以便在别处进一步处理)。例如: Deutsche Börse 当我这样做时: u'Deutsche Bör
我不断使用以下代码进行 segmentation 。将 4000 更改为 1000 可使代码运行良好。我会认为我这里有足够的内存...我该如何解决这个问题? #include #include #
我有一个对象列表,我想以随机顺序连续访问这些对象。 我想知道是否有一种方法可以确保随机值并不总是相似。 例子。 我的列表是队列列表,我试图交错这些值以生成用于测试的真实场景。 我并不是特别想要队列 1
我有一种情况需要优化无序集的创建。预期的元素数量约为 5-25M。我的第一个想法是我应该事先准备好所有数据并做一些类似的事情 unordered_set s(data); 代替 for (auto&
我有一个使用大图像作为背景的网站。这是一个大小为 134KB 的 jpeg - 到目前为止我真的无法得到它。我已经在低质量 jpeg 设置的 photoshop 中将其保存为网络。它的尺寸是:1920
在数组中的相同索引位置使用来自多个数组的参数创建类的新实例的“ruby-ish”方法是什么? 例如,我目前在做: array1.each_with_index { |element, i|
我是一名优秀的程序员,十分优秀!