首页 > 解决方案 > 将具有透明背景的图像与普通图像(非透明背景)混合后如何调整 alpha 值?

问题描述

我正在做一个项目来实现虚拟化妆。我在实施眼线笔部分时遇到问题。

我应该如何更改 alpha 值(alpha_s,alpha_l)?在 Python 中?

我想调整 alpha 值,使脸部图像上的眼线可能看不到,可能看起来模糊,或者我想看清楚。

人脸图片来源是 YouTube '뽐뽐뽐' (Apink's Bomi)

下面是python代码,人脸的高宽,img都是一样的。

face = cv2.imread('./image/ex1.png')
img = cv2.imread('./result_3.png',-1) ## It is shaped like a left eyeliner and has a transparent background.

x_offset = y_offset = 0
alpha_s = img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s
for c in range(0, 3):

    face[y_offset:y_offset+img.shape[0], x_offset:x_offset+img.shape[1], c] = \
    (alpha_s * img[:, :, c] + alpha_l * face[y_offset:y_offset+img.shape[0], 
    x_offset:x_offset+img.shape[1], c])
cv2.imshow('result', face)
cv2.waitKey(0)
cv2.destroyAllWindows()

'result_3.png' 图像看起来像这样。->在此处输入图像描述

一些代码结果图像(左眼)->在此处输入图像描述

请帮我。

标签: pythonopencvimage-processing

解决方案


我通过参考下面的网站解决了这个问题。

https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/

核心代码)

cv2.addWeighted(overlay, alpha, face, 1 - alpha,0, face)

overlay是应用了虚拟化的原始人脸图像,而face是原始人脸图像。

透明度可以根据alpha值进行调整。

注)我能够在脸部图像上实现适合脸部图像的眼线形人物的外观,但我无法实现透明度调整。

为了调整透明度,我试着像原文的代码一样实现它。

但是,通过上面的核心代码成功实现了透明度控制。


推荐阅读