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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐