即使我摆脱了背景,为什么仍显示黑色背景?

时间:2019-08-20 16:45:42

标签: python opencv

因此,我试图使用opencv制作莱昂纳多·迪卡普里奥的镜头光晕模因。由于我是opencv的新手,所以我做了其他所有人都做的事情:为指针打开stackoverflow。

我在镜头光晕图像上放置了一个alpha层,并去除了黑色像素,因此仅显示镜头光晕。之后,我检测了迪卡普里奥的眼睛,然后将经过编辑的镜头光晕图像粘贴到眼睛上。

    img = cv2.imread("/home/ansuman/Downloads/lensf1.jpg")
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    tmp = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    _,alpha = cv2.threshold(tmp,5,255,cv2.THRESH_BINARY)
    b,g,r = cv2.split(img)
    rgba = [b,g,r,alpha]
    dst = cv2.merge(rgba, 4)
    plt.imshow(dst)
    print(dst.shape)

    face_cascade = cv2.CascadeClassifier('/home/ansuman/DIP/lensflare/haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier('/home/ansuman/DIP/lensflare/haarcascade_eye.xml')

    user = cv2.imread("/home/ansuman/Downloads/Dicaprio.jpg")
    gray_user = cv2.cvtColor(user, cv2.COLOR_BGR2GRAY)
    user = cv2.cvtColor(user, cv2.COLOR_BGR2BGRA)
    faces = face_cascade.detectMultiScale(gray_user, 1.3, 5)
    print("Faces:",faces)
    for (x,y,w,h) in faces:
        roi_gray = gray_user[y:y+h,x:x+w]
        roi_color = user[y:y+h,x:x+w]
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            print(ex,ey,ew,eh)
            #cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,0,255),5)

            # resizing & paste the lf image on user
            roi_eye = user[y+ey:y+ey+eh,x+ex:x+ex+ew]
            resized_lensflare = cv2.resize(dst,(eh,ew))    
            resized_lensflare = cv2.cvtColor(resized_lensflare, cv2.COLOR_BGR2RGBA)
            user[y+ey:y+ey+eh,x+ex:x+ex+ew] = resized_lensflare
    plt.imshow(user)

问题是,当我使用imshow显示最终图像时,眼睛上方的图像具有原始的镜头光晕,但背景为白色,而不是黑色。

有人可以帮我吗?我想摆脱白色背景。

我找到了一个可以帮助我的链接,但是它对我而言并不完全有效。这是链接:overlay a smaller image on a larger image python OpenCv

0 个答案:

没有答案