透明オーバーレイを作成するには、2つの画像を準備する必要があります。(1)元の画像、(2)最初の画像に「スーパーインポーズ」する画像(一定レベルのアルファ透明度を含む)。
透明オーバーレイの使用例はほぼ無限であり、そのうちの2つは次のとおりです。
- 実行時の重要な情報は、別のウィンドウや端末に表示する代わりに、出力画像に直接オーバーレイできます。透明なオーバーレイを使用すると、出力画像のコンテンツを混乱させる必要性を減らすことができます。
- アルファ透明度を使用して、2つの画像を「融合」します。
cv2.addWeightedを使用して、透明オーバーレイ関数を適用します
cv2.addWeighted(overlay、alpha、output、1-alpha、0、output)
- –オーバーレイ:適用するオーバーレイ画像
- –cv2.addWeighted(overlay、alpha、output、1-alpha、0、output)
- -アルファ:オーバーレイの実際のアルファ透明度は、アルファが1に近いほど、画像が不透明になります。アルファが0に近いほど、オーバーレイが表示されます。
- –出力:元の画像
- -ベータ:ベータは1-アルファとして定義されます。アルファ+ベータ= 1.0を定義する必要があります
- gamma:ガンマ値-加重和に追加されるスカラー。ガンマは、加重加算を適用した後に出力画像に加算される定数と考えてください。ゼロに設定すると、定数値の加算演算を適用する必要がなくなります。
- -出力:最終結果、出力画像
効果画像:
# USAGE
# python overlay.py
# 导入必要的包
from __future__ import print_function
import numpy as np
import cv2
import imutils
# 加载图像
image = cv2.imread("../image/flower4.jpg")
image = imutils.resize(image, width=600)
cv2.imshow("origin", image)
cv2.waitKey(0)
# 循环遍历 [0,1.0] 的透明度
for alpha in np.arange(0, 1.1, 0.1)[::-1]:
# 创建俩个原始图的拷贝
# 一个用于构建叠加层 一个用于输出图像
overlay = image.copy()
output = image.copy()
# 在左上角 添加文本: PyimageSerach:alpha
# 在右下角画一个矩形的红色框
cv2.rectangle(overlay, (150, 210), (500, 630),
(0, 0, 255), -1)
cv2.putText(overlay, "PyImageSearch: alpha={:.2f}".format(alpha),
(10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 3)
# 使用cv2.addWeighted应用透明叠加层功能
# overlay: 我们要应用的叠加层图像
# alpha: 叠加层的实际Alpha透明度,alpha越接近1,图像越不透明;alpha越接近0,叠加层显示得越透明;
# output: 原始图像
# beta: 我们提供beta值作为第四个参数。 Beta定义为1-alpha 。我们需要定义alpha和beta,以便alpha + beta = 1.0
# gamma: 伽玛值-加到加权和的标量。您可以将gamma视为应用加权加法后添加到输出图像的常数。在这种情况下,我们将其设置为零,因为我们不需要应用恒定值的加法运算。
# output: 输出图像
cv2.addWeighted(overlay, alpha, output, 1 - alpha,
0, output)
# 展示输出图像,alpha,beta
print("alpha={:.2f}, beta={:.2f}".format(alpha, 1 - alpha))
cv2.imshow("Output", output)
cv2.waitKey(0)
cv2.destroyAllWindows()
参照: