Image 图像处理中缺少颜色信息

Image 图像处理中缺少颜色信息,image,python-3.x,numpy,python-imaging-library,rgba,Image,Python 3.x,Numpy,Python Imaging Library,Rgba,我正在学习使用numpy操作图像,但是颜色信息丢失了。我想知道为什么会发生这种情况 我的目标是提取两幅图像之间的差异 零步:加载库 第一步:使用RGBA信息对图像进行矢量化 第二步:通过逻辑规则找出两幅图像之间的差异 第三步:将图像RGBA信息切换回图像 我希望从修改后的Lena图像中得到色彩鲜艳的Welly。这样地 但是,我不知道它只检测图像的轮廓/黑色部分。有什么可能的原因吗 免责声明:这是2017年春季在南大开设的一门课程中的一篇文章。我正在学习这门课程并自学。所以你不是在为我或其他人做

我正在学习使用numpy操作图像,但是颜色信息丢失了。我想知道为什么会发生这种情况

我的目标是提取两幅图像之间的差异

零步:加载库

第一步:使用RGBA信息对图像进行矢量化

第二步:通过逻辑规则找出两幅图像之间的差异

第三步:将图像RGBA信息切换回图像

我希望从修改后的Lena图像中得到色彩鲜艳的Welly。这样地

但是,我不知道它只检测图像的轮廓/黑色部分。有什么可能的原因吗


免责声明:这是2017年春季在南大开设的一门课程中的一篇文章。我正在学习这门课程并自学。所以你不是在为我或其他人做作业。谢谢大家!

修改RGB比较可以解决以下问题:

 if np.array_equal(arr_mod[i, j],arr_org[i, j]):
         arr_diff[i,j] = (0,0,0,0)
     else :
         arr_diff[i, j] = arr_mod[i, j]
问题是因为np.all将返回True如果所有值都为True或它们的Truthiness值为True,下面的示例将在交互控制台中返回True

np.all([2,3,4,5]) == np.all([1,2,3,4])
这将在交互控制台中返回false:

np.all([2,3,4,5]) == np.all([0,2,3,4])

让我更详细地解释我的错误。正如@Abhijith pk的解释,np.all不是用来比较数组值的,这里是像素值。用于检查数组中的所有值是否为真

例如,我检查右下角arr_org[511511]=[75 18 255]&np。all[75 18 18 255]=True意味着RGBA元素都不为零

但是,对于黑色轮廓,其RGBA将为[0 0 255]&np。所有[0 0 255]=False表示部分RGBA元素为零

我使用了错误的代码,但我碰巧得到了大纲。这是因为在原始Lena图像中,大多数/所有RGBA像素值均为非零且np.all=真;而在修改后的Lena图像中,Welly的轮廓为黑色,并且在RGBA像素值np中为零。all=False。由于np.all只有黑色的大纲有错误的输出,我很幸运通过比较np.all得到了大纲


同样,在我的案例中使用np.all是错误的。建议使用np.array_equal。我只是想分析一下得到黑色轮廓的巧合。

你可以使用absdiff方法来做到这一点。顺便说一句,如果你可以,你应该总是提供预期的解决方案。差异可能意味着很多事情,严格地说,这将是像素值差异或组合差异的差异。感谢您的评论。我确实犯了一个错误,把他们的像素值之间的差异,并得到有趣的结果。预期的解决方案是中间的图像,在右下角有一个彩色的Wely。然而,我很好奇,为什么我只能得到黑色的轮廓,而我有RGBA像素值。
img_diff = Image.fromarray(arr_diff, 'RGBA')
img_diff.save('ans_two.png')
 if np.array_equal(arr_mod[i, j],arr_org[i, j]):
         arr_diff[i,j] = (0,0,0,0)
     else :
         arr_diff[i, j] = arr_mod[i, j]
np.all([2,3,4,5]) == np.all([1,2,3,4])
np.all([2,3,4,5]) == np.all([0,2,3,4])