【opencv】图片背景去除处理与图片合成

图片LOGO去背景合成图

实际工作中经常遇到把LOGO合并到大图上面,因此通过模块opencv的学习把最终实现效果呈现给各位优秀的朋友,希望制作的过程与思路能够对大家学习可视化起到画龙点睛的作用。

                                                                          ***德天老师,祝大家学习愉快!***

背景图:

【opencv】图片背景去除处理与图片合成_第1张图片

LOGO合成图:

【opencv】图片背景去除处理与图片合成_第2张图片

代码块整理

import cv2
import numpy as np
img = cv2.imread('img1/jing.jpg')
img_big = cv2.imread('img1/mount_water.jpg')

h,w,_ = img.shape
roi = img_big[0:h,0:w]
#1 mask是轮廓线条为黑,背景为白
#2 mask是轮廓为白,背景为黑

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#logo转灰
ret,mask=cv2.threshold(gray,200,255,cv2.THRESH_BINARY) #通过低于200变黑,变成黑白mask类型
mask_inv=cv2.bitwise_not(mask)  #反转黑白处理


#显示轮廓并镂空底图
mask_and = cv2.bitwise_and(roi,roi,mask=mask)
#无背景轮廓
mask_small = cv2.bitwise_and(img,img,mask=mask_inv)
#前后合并完成效果
dst = cv2.add(mask_and,mask_small)
img_big[0:h,0:w]=dst
#依次显示
cv2.imshow('mask',mask)
cv2.imshow('mask_inv',mask_inv)
cv2.imshow('mask_and',mask_and)
cv2.imshow('mask_small',mask_small)
cv2.imshow('mask_big',img_big)
cv2.waitKey()
cv2.destroyAllWindows()

图像合成分层分析:

1、获取roi,小图在大图上的映射区域
【opencv】图片背景去除处理与图片合成_第3张图片

2、拿到白色背景,黑色轮廓的mask
【opencv】图片背景去除处理与图片合成_第4张图片

3、拿到mask的黑白反转图mask_inv
【opencv】图片背景去除处理与图片合成_第5张图片

4、通过数据运算bitwise_and,获取带有底图背景被镂空轮廓的图片
【opencv】图片背景去除处理与图片合成_第6张图片

5、通过msk_inv结合运算bitwise_and,拿到仅显示轮廓的轮廓图mask_small
【opencv】图片背景去除处理与图片合成_第7张图片

6、将4,5的背景图和轮廓图合并得到一块合成图大小与Logo图相当的除掉背景的合成图dst
【opencv】图片背景去除处理与图片合成_第8张图片

7、将合并图dst,传递到背景图上roi位置
【opencv】图片背景去除处理与图片合成_第9张图片
根据学习制作过程中出现的问题梳理总结。
理解 mask_and = cv2.bitwise_and(roi, roi, mask=mask) 图片如下:
第一个roi为输入的背景图映射图,第二个roi为使用bitwise_and运算显示的蓝天背景图,圆形圈起的图是mask_and结果图
【opencv】图片背景去除处理与图片合成_第10张图片
理解mask_small = cv2.bitwise_small(img,img,mask=mask_inv)图片如下
【opencv】图片背景去除处理与图片合成_第11张图片

鉴于涉及到问题较多,因此需要理解好每一步的图片代表含义。

你可能感兴趣的:(opencv,Python,提升,Python中级语法,opencv,计算机视觉,python)