最近遇到需要去除图片黑色背景,如下图:如果使用OPENCV,加上一些图像处理算法,你可以去除任何背景。但是由于这个需求是去除黑色背景,所以我觉得没有必要使用更复杂的算法。于是打算在网上搜索一下,一开始没找到,但是找到了一篇关于如何用ps去除黑底的文章:removetheblackbackgroundofthepictureandoutputitastransparentpng(算法andtool),不过主要是说用PS操作,里面说的原理不是很清楚。所以打算自己想一个算法。错误的思路最初的思路是判断颜色是否为黑色(r=0,g=0,b=0),如果是黑色则将像素点的透明度设置为0。但是结果肯定不尽如人意,如下图所示:结果,没有一个像素被设置为完全透明。为什么?因为背景不是纯黑,而是黑色,比如像素值(r=15,g=5,b=5),不是纯黑,而是人眼感觉黑。想了想正确的想法后,又想到了另一个想法,那就是颜色越深,透明度设置越低。因此,只需要去掉像素中三个通道中较大的值,设置为颜色的透明度即可。例如,如果像素值(r=15,g=5,b=5),您可以将透明度设置为Math.max(15,5,5)=15。下面是示例代码:functionremoveBlackBackgroundFunc(frameImageData){letdata=frameImageData.data;for(vari=0;i
