【问题标题】:Getting value error when trying to use numpy to merge alpha images尝试使用 numpy 合并 alpha 图像时出现值错误
【发布时间】:2021-07-10 16:14:02
【问题描述】:

我想在这里举一个例子: https://note.nkmk.me/en/python-opencv-numpy-alpha-blend-mask/

我的代码在最后两行之前都可以正常工作。所以这部分正在工作......

import numpy as np
from PIL import Image, ImageOps

...

im1 = Image.open("G:\\u3road3.jpg")
im2 = Image.open("G:\\u3road1.jpg").resize(im1.size,Image.BILINEAR)

mask = Image.open("G:\\u3RoadMask2.jpg").convert('L')
mask2 = mask.resize(im1.size,Image.BILINEAR)

src1 = np.array(im1)
src2 = np.array(im2)
mask1 = np.array(mask2)
mask1 = mask1 / 255

...

但如果我添加这一行,它会失败并显示“ValueError”:

dst = src1 * mask1 + src2 * (1 - mask1)

所以我什至没有到达保存图像的最后一行:

Image.fromarray(dst.astype(np.uint8)).save('G:/testes.jpg')

有人知道我接下来可以尝试什么吗?

【问题讨论】:

  • 全栈跟踪,好吗?您使用的是什么版本的 OpenCV?你的调试打印在哪里?除了这个,你还尝试过什么?
  • 不使用我所知道的 OpenCV。刚刚安装了numpy。因为我只是在复制代码,所以我真的没有什么可以尝试的。
  • 呃,我没有意识到这一点。我只是假设您正在使用它,因为本教程基本上基于 OpenCV。
  • 实际的错误信息是什么?很多事情都可以产生ValueError

标签: python numpy python-imaging-library


【解决方案1】:

检查 Numpy 数组的类型。我的意思是:

print(src1.dtype, src2.dtype, mask1.dtype)

它们几乎肯定是uint8,这意味着 0 到 255 之间的整数。当你将该范围内的一个数字除以 255 时,你会得到很多零,而实际上你想要很多浮点数介于 0 和 1 之间。

尝试除以 255.0,然后检查 dtype

【讨论】:

  • 是的,它们是 uint8 并且将掩码除以 255.0 给我一个 float64。但是我在下一行仍然得到一个错误,但即使将 src1 和 src2 除以 1.0(得到另一个 float64)仍然在下一行给我 ValueError 。所以我仍然对下一步该做什么感到困惑。
  • 您能否分享您的实际图像,以及您实际的、完整的可运行代码和实际完整的错误消息。处理细节更容易?
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多