【发布时间】:2021-01-04 22:24:13
【问题描述】:
我刚开始学习矢量化方法,但我仍然很难习惯。我想使用 OpenCV 和 NumPy 制作图像过渡效果。作为第一步,我只是将图像对角切割在一起,而不关心混合效果。
im3 = np.zeros(im1.shape, np.uint8)
yMax = int(im1.shape[0])
xMax = int(im1.shape[1])
border = (xMax+yMax)/2
for y in range(yMax):
for x in range(xMax):
if((y + x) > border):
im3[y , x, :] = im1[y, x, :]
else:
im3[y, x, :] = im2[y, x, :]
(其中im1和im2是之前读取的两个大小相同的bgr图片)
但我知道使用 for 循环真的很慢,所以我想使用矢量化方法。作为下一步,我移动了 if else。
for y in range(yMax):
for x in range(xMax):
im3[y, x, :] = im1[y, x, :] * ((y + x) > border)
im3[y, x, :] += im2[y, x, :] * ((y + x) < border)
但后来我意识到我仍然看不到摆脱 for 循环的方法,因为即使我可以改变
imx[y, x, :] to imx[ :, :, :]
我仍然需要 x 和 y:
((y + x) > border)
我几乎可以肯定有一些非常简单的方法可以做到这一点,或者我使用了错误的方法。
【问题讨论】:
标签: python numpy vectorization