Use Python, OpenCV para construir uma sobreposição transparente

Para construir uma sobreposição transparente, duas imagens precisam ser preparadas: (1) a imagem original; (2) a imagem a ser "sobreposta" na primeira imagem (contém um certo nível de transparência alfa).

Os casos de uso para sobreposições transparentes são quase infinitos, dois dos quais são:

  • Informações importantes em tempo de execução podem ser sobrepostas diretamente na imagem de saída em vez de serem exibidas em uma janela ou terminal separado. Usar uma sobreposição transparente pode reduzir a necessidade de confundir o conteúdo da imagem de saída!
  • Use a transparência Alpha para "fundir" as duas imagens.

Use cv2.addWeighted para aplicar a função de sobreposição transparente

cv2.addWeighted (sobreposição, alfa, saída, 1 - alfa, 0, saída)

  • –Overlay: a imagem de overlay que queremos aplicar
  • –Cv2.addWeighted (sobreposição, alfa, saída, 1 - alfa, 0, saída)
  • -Alfa: a transparência alfa real da sobreposição, quanto mais próximo o alfa estiver de 1, mais opaca será a imagem; quanto mais próximo o alfa estiver de 0, mais transparente a sobreposição será exibida;
  • –Saída: imagem original
  • -Beta: Beta é definido como 1-alfa. Precisamos definir alfa + beta = 1.0
  • gama: valor gama - um escalar adicionado à soma ponderada. Pense em gama como uma constante adicionada à imagem de saída após aplicar a adição ponderada. Definir como zero significa que não há necessidade de aplicar uma operação de adição de valor constante.
  • -Saída: o resultado final, imagem de saída

Imagem do efeito:
Insira a descrição da imagem aqui

# 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()

referência:

Acho que você gosta

Origin blog.csdn.net/qq_40985985/article/details/106257379
Recomendado
Clasificación