基于Python、Opencv的图像混合入门

a) addWeighted()

利用cv2.addWeighted()函数将两个大小不同的照片(lena.png)+ (logo.png 任务2中生成的)混合在一起
提示:
cv2.addweighted()函数只能用于操作两个尺寸相同的图片,可以先在lena.png中去尺寸和logo.png相同的ROI区域,将这个区域和logo.png进行混合


import cv2 
import numpy as np

lena = cv2.imread('F:/img/lena.png') 
logo = cv2.imread('F:/img/logo.png')

rows,cols = logo.shape[:2]

roi = lena[0:rows,0:cols]

dst = cv2.addWeighted(logo,0.65,roi,0.35,0)
add_img = lena.copy()
add_img[0:rows,0:cols] = dst

cv2.imshow('Add_Img',add_img)
cv2.waitKey(0)

在这里插入图片描述

b)bitwise_and()+add()

将两幅图像(lena.png)+ (logo.png)进行融合
提示:
#1,在lena.png获取和logo.png大小相同的ROI
#2,基于logo.png的灰度图,利用简单的阈值分割创建一个掩模
#3,将roi与掩模进行按位与操作,去掉logo中非0部分,得到新的图
#4,将新图与logo相加,然后将这一部分替换掉原始图像的roi部分


import cv2
import numpy as np

#加载图片
lena = cv2.imread('F:/img/lena.png') 
logo = cv2.imread('F:/img/logo.png')

#把logo放在左上角
rows,cols = logo.shape[:2]
roi = lena[0:rows,0:cols]

#创建掩膜
logogray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(logogray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)


img2 = cv2.bitwise_and(roi,roi,mask = mask_inv)
#cv2.imshow('1',img2)
dst = cv2.add(logo,img2)
#cv2.imshow('2',dst)
lena[0:rows,0:cols] = dst

cv2.imshow('And_Img_of_lindun',lena)
cv2.waitKey(0) 
cv2.destroyAllWindows()

在这里插入图片描述

c) bitwise_and()+addWeighted()

将两幅图像(lena.png)+ (logo.png)进行融合


import cv2
import numpy as np

#加载图片
lena = cv2.imread('F:/img/lena.png') 
logo = cv2.imread('F:/img/logo.png')

#把logo放在左上角
rows,cols = logo.shape[:2]
roi = lena[0:rows,0:cols]

#创建掩膜
logogray = cv2.cvtColor(logo, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(logogray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)


img2 = cv2.bitwise_and(roi,roi,mask = mask_inv)


dst = cv2.add(logo,img2)
dst_1 = cv2.addWeighted(roi,0.6,dst,0.4,0)
lena[0:rows,0:cols] = dst_1
#lena[0:rows,0:cols] = dst

cv2.imshow('And_Img_of_lindun_2',lena)
cv2.waitKey(0) 
cv2.destroyAllWindows()

在这里插入图片描述

原创文章 7 获赞 8 访问量 1165

猜你喜欢

转载自blog.csdn.net/bestlinton/article/details/105273358