【发布时间】:2017-11-27 03:10:51
【问题描述】:
我正在学习使用 numpy 来处理图像,但是缺少颜色信息。我想知道为什么会这样。
我的目标是提取两个图像之间的差异。
零步:加载库
import numpy as np
from PIL import Image
第一步:使用 RGBA 信息对图像进行矢量化
img_org = Image.open('lena.png').convert('RGBA')
arr_org = np.array(img_org)
img_mod = Image.open('lena_modified.png').convert('RGBA')
arr_mod = np.array(img_mod)
arr_diff= np.zeros_like(arr_mod)
第二步:通过逻辑规则找出两个图像之间的差异
for i in range(arr_mod.shape[0]) :
for j in range(arr_mod.shape[1]) :
if np.all(arr_mod[i, j]) == np.all(arr_org[i, j]):
arr_diff[i,j] = (0,0,0,0)
else :
arr_diff[i, j] = arr_mod[i, j]
第三步:将图像RGBA信息切换回图像
img_diff = Image.fromarray(arr_diff, 'RGBA')
img_diff.save('ans_two.png')
但是,我不知道它只检测图像的轮廓/黑色部分。这有什么可能的原因吗?
免责声明:这是 homework 来自南大 2017 年春季开设的课程。我正在学习这门课程并自学。所以你不是在为我或其他任何人做作业。谢谢!
【问题讨论】:
-
您可以使用
absdiff方法来执行此操作。顺便说一句,如果可以的话,您应该始终提供expected解决方案。Difference可以表示很多东西,严格来说是像素值差异或组合差异的差异。 -
感谢您的评论。我确实犯了一个错误,以获取它们的像素值之间的差异并得到有趣的结果。预期的解决方案是中间的图像,右下角有一个五颜六色的井。但是,我很好奇为什么我只有在拥有 RGBA 像素值时才能得到黑色轮廓。
标签: image python-3.x numpy python-imaging-library rgba