因为公司的需求,有几百万张图片需要识别,筛选出背景是透明的图片,我上网找了一圈也没看到成熟的方案,于是自己想了一个比较简陋但是还算是挺好用的方案.
大概的图片就是这些种类吧,图一图三是我想要筛选出来的,图二这种就是我要过滤掉的.
最初的想法是先识别出来图片的轮廓,然后把轮廓外的像素识别一遍,看看是不是透明的.
但是我发现这个想法很好,但是好像比较适合大神级别的人物来处理.
于是就耍了小聪明,我只要识别4个角,只要有一个角是透明的,那他的背景肯定就不是非透明的了,哈哈哈感觉自己好机智.
然后就发现了图三.....居然四个角全是非透明的
但是没关系,我再多识别几个点 把两个长的中间点也识别一下,这样6个点,超过2个点是透明的,就暂时认为他是透明的吧.
下面是获取6个角的代码
# 读取图片,显示每个像素的rgba值,cv2.IMREAD_UNCHANGED代表显示全部属性,默认是不显示透明度a的值
img = cv2.imread("jingyu.png", cv2.IMREAD_UNCHANGED)
# 获取图片的大小(长,宽,属性(4代表显示rgba,3代表rgb))