iOS开发-简单图片背景替换 实现抠图效果

               

之前好奇, 想实现这样的功能   -----> iOS图像处理-(jpg去除白色背景)

把一张图片(.jpg)的白色背景抠掉,转成.png 格式的有alpha通道的透明图。

原图黑白分明, 像这样

转换成这样


然后在论坛,得到了想要的答案。这里先谢过那位大牛, 也提供了参考资料:  iOS8 Core Image In Swift:更复杂的滤镜

然后今天, 自己也总结一下。

写了个小小的demo, 实现背景图片的切换. 效果如下:

可以看到, 原先的黄色渐变背景被替换掉了。  接下去就是要实现这样一个功能。


当然. 如果感兴趣, 你可以从这里下载到源码: http://download.csdn.net/detail/hitwhylz/8186081




消除橙黄色

就像Photoshop的魔法棒一样,Core Image也有类似的滤镜,但是没有那么简单粗暴,使用起来很麻烦。
在Core Image里,我们为了消除某种颜色,需要使用 CIColorCube滤镜,而CIColorCube滤镜需要一张cube映射表,这张表其实就是张颜色表(3D颜色查找表),把你想消除的颜色的alpha值设置为0,其他的颜色不变,Core Image将会把图像数据上的颜色映射为表中的颜色,以此来达到消除某种颜色的目的。
CIColorCube的这张表默认不会对inputImage作任何处理,但在我们这里要将所有的橙黄色干掉,所以需要自己来建立这张表。
我们要消除的“橙黄色”并不只是视觉上的一种颜色,而是颜色的范围,最直接的方法是 将RGBA转成HSV(Hue,Saturation,Value),在HSV的格式下,颜色是围绕圆柱体中轴的角度来表现的,在这种表现方法下,你能把颜色的范围想象成连在一起的扇形,然后直接把该块区域干掉(alpha设为0),这就表示我们实际上需要指定颜色区域的范围------围绕圆柱体中轴线的最小角度以及最大角度,此范围内的颜色alpha设为0。最后,Cube Map表中的数据 必须乘以alpha,所以创建Cube Map的最后一步是把RGB值乘以你刚刚计算出来的alpha值:如果是想要消除的颜色,乘出来就是0,反之则不变。这是一张代表颜色值区域的HSV(Hue值)图:

可以看到如果是纯黄色,其取值是60度,蓝色是240度,我们这种情况取值大概在35到55左右(偏黄一点), 在这个网站上可以看到更详细的RGB颜色对应的HSV值。
那么接下来我们就准备创建Cube Map表,创建Cube Map表的方法在 苹果官方示例中可以找到,是C语言实现的,为了方便起见,我们就直接创建一个C文件来包含这些代码。
在工程里选择 新建一个.c文件,我取名为cubeMap.c&#
iOS上使用OpenCV实现抠图背景替换功能是可行的。OpenCV是一个开源的计算机视觉库,它提供了各种图像处理和分析技术,包括图像分割和图像合成等功能,非常适合进行图像背景替换。 具体实现步骤如下: 1. 导入OpenCV库:在iOS项目中,首先需要将OpenCV库导入到项目中,并进行相应的配置。 2. 图像分割:使用OpenCV提供的图像分割算法,如GrabCut算法,将目标对象与背景进行分离。该算法需要输入一张包含目标对象的图像,并对其进行初始化,引导GrabCut算法进行分割。 3. 背景替换:根据分割得到的目标对象,将它与另一张背景图像进行合成。可以使用OpenCV提供的透明度混合函数,将目标对象与背景图像进行混合。具体操作是通过像素级的合成运算,计算目标对象像素与背景图像像素之间的混合比例,从而实现替换背景效果。 4. 后续处理:根据需求,可以对合成后的图像进行调整和优化。例如,可以对合成后的图像进行色彩调整、亮度调整或者模糊处理,以使合成的结果更加自然。 需要注意的是,在实现抠图背景替换功能时,选择合适的图像分割算法和优化方法是非常重要的。这可能需要根据具体需求和实际情况进行调试和优化。 总结起来,使用iOS上的OpenCV库可以很好地实现抠图背景替换功能。通过图像分割和背景替换等技术手段,可以将目标对象与不同的背景进行合成,实现抠图背景替换效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值