多语言展示
当前在线:486今日阅读:175今日分享:29

按位运算抠图的方法(opencv-python)

给出下面两幅图片。第一幅图片,我希望保留第一幅图片为背景,但是希望把第二幅图片里面的LOGO提取出来,放到第一幅图片里面。
工具/原料
1

电脑

2

python3+

方法/步骤
1

粗暴的裁剪,并不能去掉第二幅图的背景:import cv2a = cv2.imread('a.png')b = cv2.imread('d.png')r,c,ch = b.shapea[0:r,0:c] = b

2

第二幅图片比第一幅图片小,我先从第一幅图的左上角裁出一部分,使之与第二幅图大小一样:rh = a[0:r,0:c]

3

把第二幅图变成灰度图:g = cv2.cvtColor(b,cv2.COLOR_BGR2GRAY)

4

然后把灰度图二值化:ret, mask = cv2.threshold(g, 220, 255, cv2.THRESH_BINARY)其中,220到255表示二值处理的阈值,这个数值需要自己尝试,目的是尽量把背景和前景完整的分离开来。比如:ret, mask = cv2.threshold(g, 190, 255, cv2.THRESH_BINARY)分离效果不好。

5

从rh里面抠出一个LOGO的轮廓:x = cv2.bitwise_and(rh,rh,mask = mask)

6

从第二幅图里面抠出LOGO标志:y = cv2.bitwise_and(b,b,mask = cv2.bitwise_not(mask))扣得不太完整。

7

x+y

8

这样就算成功了:a[0:r,0:c] = x+y

注意事项

这个抠图的效果有瑕疵。

推荐信息