【发布时间】:2019-02-08 01:15:42
【问题描述】:
假设我有两个相同尺寸、8 位颜色、RGB 格式的 numpy 图像数组,a 和 b。现在假设我想生成一个新的 numpy 数组,其像素值是使用“叠加”混合模式组合的前两个像素值。
它的定义,取自维基百科,如下,其中b是顶层,a是底层:
在公式中,我相信a 和b 用它们的“白度”表示,即全白像素为1,全黑像素为0。我不确定色调如何发挥作用进入那个。
我不确定是否有更快的方法来做到这一点,而不是逐个像素地迭代两个图像,这对于 1920x1080 图像来说真的很慢。我需要能够尽快做到这一点。
例如,我设法实现了加法混合模式如下:
import numpy as np
import cv2
a = cv2.imread("a.jpg", cv2.IMREAD_UNCHANGED)
b = cv2.imread("b.jpg", cv2.IMREAD_UNCHANGED)
a = a.astype(float)
b = b.astype(float)
ab = a
for i in range(len(ab)):
ab[i] = a[i] + b[i]
cv2.imwrite('Out.png', ab)
这似乎相当快,而且肯定比试图通过逐个像素迭代来实现同样的事情要快得多。但是再一次,这只是 Addition 混合模式,我需要 Overlay 混合模式。
如果你知道任何 Python 实现的 numpy 数组形式的两个 RGB 图像之间的 Overlay 混合模式非常有效,请帮助我找到它。如果没有,您能否尽可能高效地实施它?
【问题讨论】:
标签: python python-3.x image numpy opencv