【问题标题】:Using Python and Numpy to blend 2 images into 1使用 Python 和 Numpy 将 2 个图像混合为 1 个
【发布时间】:2015-08-28 13:52:06
【问题描述】:

我需要将 2 个 numpy.ndarrays 作为参数并逐个像素地遍历它们中的每一个,将 2 个值相加并除以 2。

本质上是创建两者的混合图像并将其作为 numpy.ndarray 返回

这是我想出的,但确实可以使用一些建议。

    def blendImages(image1, image2):            
        it1 = np.nditer(image1)
        it2 = np.nditer(image2)            
        for (x) in it1:
            for (y) in it2:
                newImage = (x + y) / 2
        return newImage

【问题讨论】:

  • 因为你包含了OpenCV标签,你可以使用dst = cv2.addWeighted(img1,0.5,img2,0.5,0)
  • 关于 numpy 要记住的一点是,它会为您完成迭代(并且比原生 Python 快得多)。
  • 谢谢 Miki,效果很好!我还在纠结这些功能,谢谢乔恩。
  • @yodish 很高兴它成功了。然后作为答案发布

标签: python opencv numpy


【解决方案1】:

你可以使用OpenCV函数addWeightedlike:

 cv2.addWeighted(img1,0.5,img2,0.5,0)`

【讨论】:

  • 如何为超过 2 张图像添加加权?@Miki
  • @ryan 对于超过 2 张图片,请参阅其他答案
  • @Ryan,你发现了吗?当我执行blendof8 = weight * images[0] + weight * images[1] +... 时出现白屏
【解决方案2】:

只要数组大小相同:

newImage = 0.5 * image1 + 0.5 * image2

【讨论】:

  • 它们的大小相同,我应该提到这一点。谢谢ebo,我试试看。
  • 硬编码值 (0.5) 可能会运行得更快,但通常可以对任意数量的图像执行此操作,例如 def blendImages(*images): return np.mean(images, axis=0)
  • 谢谢你们,但我无法让那行代码正常工作;但是 dst = cv2.addWeighted(image1,0.5,image2,0.5,0) 行确实有效。
  • 结果图像变白了为什么会这样?
  • @askewchan,这为我返回了一个全白色像素的屏幕
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 2021-02-28
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
相关资源
最近更新 更多