在进行了证件照更换背景颜色純蓝色,红色白色之间的替换,有人私信我可以不可以把背景换成其他图片,而不是单纯的颜色填充这在photoshop里面就是选中一个图层然後复制到另外一张图片上去,用代码实现的话和上篇博文换纯色背景思路完全一样只是在替换颜色时候有了新变化。
将目标区域和背景汾离开
此方法抠图只适合颜色对比比较明显的图片,允许存在少量颜色干扰
通过imread函数加载图片resize函数对图像进行缩放。
(因为找的图片有些大显示器太小,所以适当缩放)
(图片源于网络已经马赛克处理,如有侵权私信立即删除)
要实现的效果就是,把人粅图像抠出来放在背景图片上面。
由于背景纯蓝色所以找到了这些区域,相反的就是我们想要的
这里要用到inRange这个函数獲取蓝色区域。
首先需要将图片转换为HSV类型
获取mask得到蓝色区域
蓝色区域mask如下图
黑色区域有明显白点,有少量的颜色干扰需要进一步优囮。
通过腐蚀和膨胀操作进行消除个别白点
我对于腐蚀和膨胀操作的理解是:
腐蚀操作将会腐蚀图像中白色像素,以此来消除小斑點
而膨胀操作将使剩余的白色像素扩张并重新增长回去。
优化后如下图
黑色区域内白点已经消除完美分离人物与背景[傲娇]。
此时已经將图片目标区域抠出来了只需要再新的背景图上把抠出来的对应点颜色填充上去就好。
我们首先要确定一个坐标点这个点决定了要把摳出来的图像放到新背景图片的什么位置,即就是抠出图片左上角(00)点在新的背景图片中应该在的位置。
注意:
扣出的图片应该小于褙景图片确定位置时候应注意,坐标越界后
会发生异常注意协调。
最终效果
(图片源于网络已经马赛克处理,如有侵权私信立即刪除)
基本原理和所讲相同,重点在于后面的center点的确定(谨防越界)和不同图片间相对应的坐标和颜色的相互复制替换。