python - 将具有透明背景的图像与普通图像(非透明背景)混合后如何调整 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' 图像看起来像这样。->在此处输入图像描述
一些代码结果图像(左眼)->在此处输入图像描述
请帮我。
解决方案
我通过参考下面的网站解决了这个问题。
https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/
核心代码)
cv2.addWeighted(overlay, alpha, face, 1 - alpha,0, face)
overlay是应用了虚拟化的原始人脸图像,而face是原始人脸图像。
透明度可以根据alpha值进行调整。
注)我能够在脸部图像上实现适合脸部图像的眼线形人物的外观,但我无法实现透明度调整。
为了调整透明度,我试着像原文的代码一样实现它。
但是,通过上面的核心代码成功实现了透明度控制。
推荐阅读
- mongodb - MongoDB-来自聚合结果的数组
- neovim - Neovim 错误:E492:不是编辑器命令:PlugInstall
- swift - 可编码的 [String: Any] 字典
- geoserver - Geo Service wfs:如何按范围调用?
- javascript - 从 JSON 对象生成 CSV 文件
- ios - iOS NSJSONSerialization 在包含 base64 字符串时返回 null
- python - Panda 将行转置为列
- c# - 如何调试未到达远程服务器的 MSMQ 消息?
- html - 输入搜索和 iframe 以用 html 显示结果
- firebase - Firebase - 如何从控制台设置自定义声明