计算机视觉-拉普拉斯金字塔图像融合
import cv2import numpy as npglobal imgglobal point1,point2global g_rectdef on_mouse(event,x,y,flag,param):global img, point1,point2,g_rectimg2=img.copy()if event ==cv2.EVENT_LBUTTONDOWN:print("1-EVENT
·
import cv2
import numpy as np
global img
global point1,point2
global g_rect
def on_mouse(event,x,y,flag,param):
global img, point1,point2,g_rect
img2=img.copy()
if event ==cv2.EVENT_LBUTTONDOWN:
print("1-EVENT_LBUTTONDOWN")
point1=(x,y)
cv2.imshow("image",img2)
elif event==cv2.EVENT_MOUSEMOVE and (flag&cv2.EVENT_FLAG_LBUTTON):
cv2.rectangle(img2,point1,(x,y),(0,255,255),thickness=2)
cv2.imshow("image",img2)
elif event == cv2.EVENT_LBUTTONUP: # 左键释放,显示
print("3-EVENT_LBUTTONUP")
point2 = (x, y)
cv2.rectangle(img2, point1, point2, (0, 0, 255), thickness=2)
cv2.imshow('image', img2)
return
def blending(path0,path1,level):
im0 = cv2.imread(path0)
im1 = cv2.imread(path1)
im0 = cv2.resize(im0, (512,512))
im1 = cv2.resize(im1, (512, 512))
cv2.imshow("img",im0)
cv2.setMouseCallback("img",on_mouse)
cv2.waitKey(0)
min_x = min(point1[0], point2[0])
min_y = min(point1[1], point2[1])
max_x = max(point1[0], point2[0])
max_y = max(point1[1], point2[1])
Laplacian0,Laplacian1,Guassian0,Guassian1,mask_list,La_pyramid,Ga_pyramid,end_im=[],[],[],[],[],[],[],[]
cv2.waitKey()
mask0=np.ones((im0.shape[0],im0.shape[1]))
mask0[ min_y:max_y,min_x:max_x,] -= 1
print(min_y,max_y,min_x,max_x)
mask_list.append(mask0)
for i in range(level):
r0 = cv2.pyrDown(im0)
r1 = cv2.pyrDown(im1)
mask0=cv2.pyrDown(mask0)
mask_list.append(mask0)
Guassian0.append(r0)
Guassian1.append(r1)
r01 = cv2.pyrUp(r0)
r11 = cv2.pyrUp(r1)
Laplacian0.append(cv2.subtract(im0,r01))
Laplacian1.append(cv2.subtract(im1,r11))
im0,im1=r0,r1
for i in range(level):
La_mat = np.zeros_like(Laplacian0[i][:, :, :])
La_mat[:, :, 0]=Laplacian0[i][:, :, 0] * mask_list[i] + Laplacian1[i][:, :, 0] * (1 - mask_list[i])
La_mat[:,:,1]=Laplacian0[i][:, :, 1] * mask_list[i] + Laplacian1[i][:, :, 1] * (1 - mask_list[i])
La_mat[:, :, 2] = Laplacian0[i][:, :, 2] * mask_list[i] + Laplacian1[i][:, :, 2] * (1 - mask_list[i])
La_pyramid.append(La_mat)
Ga_mat=np.zeros_like(Guassian1[level-1][:,:,:])
Ga_mat[:,:,0]=Guassian0[level-1][:,:,0]*mask_list[level+1-1] + Guassian1[level-1][:,:,0]*(1-mask_list[level+1-1])
Ga_mat[:, :, 1] = Guassian0[level-1][:, :, 1] * mask_list[level + 1-1] + Guassian1[level-1][:, :, 1] * (1 - mask_list[level + 1-1])
Ga_mat[:, :, 2] = Guassian0[level-1][:, :, 2] * mask_list[level + 1-1] + Guassian1[level-1][:, :, 2] * (1 - mask_list[level + 1-1])
Ga_pyramid.append(Ga_mat)
Ga_mat=cv2.pyrUp(Ga_mat)
print(Ga_mat.shape)
for i in range(level-1,-1,-1):
end_im.append(La_pyramid[i]+Ga_mat)
Ga_mat=end_im[-1]
Ga_mat = cv2.pyrUp(Ga_mat)
cv2.imshow("after",end_im[-1])
cv2.waitKey()
path0="eye1.jpg"
path1="hand .jpg"
img=cv2.resize(cv2.imread(path1),(512,512))
blending(path1,path0,8)
融合效果 层数=4
更多推荐
所有评论(0)