OpenCV Python-将一个图像置于另一个图像之上

OpenCV Python-将一个图像置于另一个图像之上,python,numpy,opencv,Python,Numpy,Opencv,我正在构建一个数独实时解算器 我正在尝试放置此图像(扭曲): 在此图像(原件)上方: 要使其成为此图像(结果): 以下是我目前得到的信息: for i in range(original.shape[0]): # original and warp have the same size for j in range(original.shape[1]): if numpy.sum(warp[i][j]) != 0: # If warp at (i,j) is no

我正在构建一个数独实时解算器

我正在尝试放置此图像(扭曲):

在此图像(原件)上方:

要使其成为此图像(结果):

以下是我目前得到的信息:

for i in range(original.shape[0]): # original and warp have the same size
    for j in range(original.shape[1]): 
        if numpy.sum(warp[i][j]) != 0: # If warp at (i,j) is not totally black
            original[i][j][0] = warp[i][j][0] # Replace original[i][j] with warp[i][j]
            original[i][j][1] = warp[i][j][1]
            original[i][j][2] = warp[i][j][2]

result = original
代码工作正常,但速度非常慢。有人能推荐一种更好的使用opencv和python的方法吗

谢谢大家!

这个怎么样

result = np.where(warp.sum(axis=-1,keepdims=True)!=0, warp, original)

.sum(axis=-1,keepdims=True)
沿最后一个轴求和,同时保留最后一个轴(对于以后的广播是必要的),这将有效地为非黑色像素创建遮罩<代码>np。where然后使用此掩码在掩码
true
时使用
warp
,否则使用
original

使用
np.where
?如何在3D阵列上使用np.where?我是Python新手。你能给我一些演示代码吗?很有效。非常感谢你!(只需更改为warp.sum而不是原来的.sum)。顺便问一下,你知道为什么我原来的代码那么慢吗?用了大约10秒来处理1300×800的图像,因为Python一般来说是相当慢的(方便得多),NUMPY使用了在引擎盖下优化的C++,速度快得多。谢谢