簡體   English   中英

opencv 使圖像透明

[英]Opencv make image transparent

我是 OpenCV 的新手,目前正在做一個項目(太陽鏡過濾器)。 我想讓太陽鏡透明。 這是我嘗試過的

sunglass = cv2.imread("sunglass.png")
sunglassCopy = sunglass.copy()
sunglassBGR = sunglassCopy[:,:,0:3]
glassMask1 = sunglassCopy[:,:,3]
# glassMask1 = np.uint8(glassMask1/255)
glassMask1 = cv2.multiply(glassMask1,3)

當我使用 alpha glassMask1時,兩者都沒有什么不同。

如果有幫助,我可以提供我的完整代碼。

已編輯 - 添加了我的代碼當我修改 alpha 時,玻璃根本不顯示


output,bboxes = detectFaceOpenCVDnn(net, img)
f = bboxes[0]
face = img[f[1]:f[3],f[0]:f[2]]

eye,y1,y2,face_width=get_eye_roi(face)
sunglassCopy = sunglass.copy()
sunglassCopy = cv2.resize(sunglassCopy, (eye.shape[1],eye.shape[0]))
sunglassBGR = sunglassCopy[:,:,0:3]
# sunglassCopy[:,:,3] = sunglassCopy[:,:,3] * 0.5
glassMask1 = sunglassCopy[:,:,3]
glassMask1 = cv2.multiply(glassMask1,3)
# glassMask1 = glassMask1 * 1

glassMask = cv2.merge((glassMask1,glassMask1,glassMask1))
#make the values [0,1]
glassMask = np.uint8(glassMask/255)
faceWithGlass = face.copy()
eyeROI,_,_,_ = get_eye_roi(faceWithGlass)
maskedEye = cv2.multiply(eyeROI, (1-glassMask))
# BGRA = cv2.cvtColor(maskedEye, cv2.COLOR_BGR2BGRA)
# print(BGRA.shape)
# a=BGRA[:,:,3] * 0.5
# BGRA[...,3]=a
maskedGlass = cv2.multiply(glassMask,sunglassBGR)
eyeFinal = cv2.add(maskedEye, maskedGlass)
faceWithGlass[y1:y2, 0:face_width]=eyeFinal
img[f[1]:f[3],f[0]:f[2]] =faceWithGlass

在此處輸入圖片說明

您應該嘗試opencvaddWeighted函數,它可以讓您將原始圖像與太陽鏡疊加,並有專門的不透明度參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM