首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ChromaKey滤波器不过滤所需颜色的CIImage

ChromaKey滤波器不过滤所需颜色的CIImage
EN

Stack Overflow用户
提问于 2022-10-28 04:42:53
回答 1查看 74关注 0票数 1

我试图使一些颜色的图像透明。下面是我的照片。

让我说,我想从图像中删除粗体红色,并使其透明。我正在查看我的图像为PDF,因此透明的颜色将是如果背景将与粉红色在侧面。我正在使用来自苹果文档的代码,我用以下方式稍微修改了这些代码:

代码语言:javascript
复制
// inside 3rd loop 

let hue = getHue(red: red, green: green, blue: blue)
let wantedHue = getHue(red: myPixel.redComponent, green: myPixel.greenComponent, blue: myPixel.blueComponent)
let isHueInRange = hue >= wantedHue - 0.1 && hue <= wantedHue + 0.1
let alpha:CGFloat = isHueInRange  ? 0 : 1

这是我得到的结果。正如你所看到的,仍然有一些颜色和背景不是完全透明的。我做了这些修改,因为我需要能够动态删除图像的背景颜色(我的图像中不会有任何人或其他复杂的对象。它很可能是文本和一些矩形。不混色。只保留颜色。)

所以我要做的是找到图像的第一个像素并得到它的颜色。当我有颜色,我得到它的色调,但我手动设置允许范围为0.2。我假设图像将不包含任何类似的颜色,我有。

编辑:原色是: rgb(200,39,39) - hsv(200,80.5,78.4)

残留颜色为: rgb(246,215,210) - hsv(352,14.6,96.5)

我的形象是:

应用过滤器后得到的图像:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 14:24:06

若要删除red颜色,如果色调介于0.90.1 (约)α之间,则应该为零。

使用下面的方法,它就能工作了。

代码语言:javascript
复制
let hue = getHue(red: red, green: green, blue: blue)
var alpha : CGFloat = 1.0
if (hue < 0.1 && hue >= 0.0) || (hue > 0.9 && hue <= 1.0){
    alpha = 0.0
}                      

我认为您的代码的问题在于它从来不考虑0.9到1.0之间的范围。它总是考虑从0.0xxx到0.1xxx之间的一些范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74230729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档