如何矢量化以下 python 代码(图像转换)?
How can I vectorize the following python code (image transition)?
我刚开始学习向量化方法,还很难适应。我想使用 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)
我几乎可以肯定有一些非常简单的方法可以做到这一点,或者我使用了错误的方法。
我不确定你是否在做你认为你在做的事情,但天真地,这就是你做事的方式:
im3 = np.where(np.indices(im1.shape[:2]).sum(0)[:, :, None] > border, im1, im2)
np.indices(im1.shape[:2]).sum(0)
只是 x + y
部分,没有执行 for
循环,where
允许您根据是否 x + y > border
是 True
(im1
) 或假 (im2
).
我刚开始学习向量化方法,还很难适应。我想使用 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)
我几乎可以肯定有一些非常简单的方法可以做到这一点,或者我使用了错误的方法。
我不确定你是否在做你认为你在做的事情,但天真地,这就是你做事的方式:
im3 = np.where(np.indices(im1.shape[:2]).sum(0)[:, :, None] > border, im1, im2)
np.indices(im1.shape[:2]).sum(0)
只是 x + y
部分,没有执行 for
循环,where
允许您根据是否 x + y > border
是 True
(im1
) 或假 (im2
).