代码之家  ›  专栏  ›  技术社区  ›  Victor Odouard

Python、Numpy、OpenCV——创建一个修改过的(同样快速的)“addWeighted”函数

  •  2
  • Victor Odouard  · 技术社区  · 8 年前

    addWeighted

    然而,我发现,尽管这些函数做的事情非常相似,但 添加权重 功能更快。所以我的问题是,我如何修改当前的解决方案,使其同样快速?有什么方法可以使用 multiprocessing

    image = np.zeros(image_1.shape)
    for row_index, row in enumerate(image_1):
         for col_index, col in enumerate(row):
              pixel_1 = image_1[row_index, col_index]
              pixel_2 = image_2[row_index, col_index]
              sum_1 = int(pixel_1[0]) + int(pixel_1[1]) + int(pixel_1[2])
              sum_2 = int(pixel_2[0]) + int(pixel_2[1]) + int(pixel_2[2])
    
              if sum_2 > sum_1:
                   image[row_index, col_index] = pixel_2
              else:
                   image[row_index, col_index] = pixel_1
    

    image_1 image_2 都是表示图像的numpy数组,都具有相同的形状吗 (720, 1280, 3)

    1 回复  |  直到 8 年前
        1
  •  2
  •   Divakar    8 年前

    一种矢量化方法是-

    mask = image_2.astype(int).sum(-1) > image_1.astype(int).sum(-1)
    out = np.where(mask[...,None], image_2, image_1)
    

    • int

    • np.where 使用此掩码,扩展到与输入阵列相同数量的DIM以进行选择。这采用了 NumPy broadcasting 以矢量化的方式进行选择。所以,这值得一看。

    keepdims=True 求和时保持DIM的数量,从而避免在下一步中扩展DIM。