import cv2 as cv
import matplotlib.pyplot as plt
img1 = cv.imread(r"C:\Users\Administrator\Desktop\logo.png")
rows,cols = img1.shape[0:2]
img2 = cv.imread(r"C:\Users\Administrator\Desktop\Messi.jpg")
roi = img2[0:rows,0:cols]
img1_gray = cv.cvtColor(img1,cv.COLOR_BGR2GRAY)
ret,img1_thres = cv.threshold(img1_gray,200,255,cv.THRESH_BINARY_INV)
img1_fg =cv.add(img1,img1,mask=img1_thres) #拿到logo图案的前景
原图如下:想将左上角的图扣下做素材
![](https://i-blog.csdnimg.cn/blog_migrate/d6ad6d871d202e867988fff330f281f8.png)
这样就完成了抠图做素材的所有步骤了
![](https://i-blog.csdnimg.cn/blog_migrate/f951705e54568bcfe9588503f28d103f.png)
接下来详解下代码:
img1_gray = cv.cvtColor(img1,cv.COLOR_BGR2GRAY)
此处是将图像由原图转成了灰度图
![](https://i-blog.csdnimg.cn/blog_migrate/6d316eca2c229441e411e873e4a08995.png)
ret,img1_thres = cv.threshold(img1_gray,200,255,cv.THRESH_BINARY_INV)
threshold函数作用:
1.去掉噪,例如过滤很小或很大像素值的图像点。
2.threshold函数python版原型:
3.retval, dst = cv.threshold( src, thresh, maxval, type[, dst] )
参数说明:
src:原图像。 dst:结果图像。
thresh:当前阈值。 maxVal:最大阈值,一般为255.
cv.THRESH_BINARY_INV
![](https://i-blog.csdnimg.cn/blog_migrate/ec7d3136ceb5722f6fa6554c3980e6cc.png)
HRESH_BINARY_INV的作用与THRESH_BINARY相反,大于thresh的值置0,小于等于thresh的值置maxval
2.这就是转化后的模样:
![](https://i-blog.csdnimg.cn/blog_migrate/bc4b4a93c93fc0a9c350db6d4f176ef4.png)
3.图片融合
img1_fg =cv.add(img1,img1,mask=img1_thres)
最后就得到黑底抠图素材啦
![](https://i-blog.csdnimg.cn/blog_migrate/37a8d2993221a1c429eaacd478c96f7a.png)
是不是很完美,你也可以试一试