【问题标题】:Image conversion and re-creation gives cryptic result图像转换和重新创建给出了神秘的结果
【发布时间】:2018-07-25 16:44:21
【问题描述】:

所以我写了这个小代码来尝试将RGB imge 转换为Grayscale 取自这个公认的answer。问题在于,即使我只是重新创建原件,它也显示出与原件毫无相似之处的神秘图像。您认为问题是什么,我们应该如何解决它?然后我想根据给定的数组b将它转换为Grayscale

这是我的代码:

import matplotlib.image as img
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

a = img.imread('hCeFA.png')

a = a * 255         #Matplotlib gives float values between 0-1

b = a * np.array([0.3, 0.59, 0.11])
b = np.sum(b, axis = 2) / 3           #Grayscale conversion

img1 = Image.fromarray(a, 'RGB')
img1.save('my.png')
img1.show()                     #Gives a cryptic image

plt.imshow(a/255, interpolation='nearest')     #Works fine
plt.show()

【问题讨论】:

  • 是什么让你觉得b = a * np.array([0.3, 0.59, 0.11])是灰度转换,你为什么对b什么都不做?
  • 该教程说将各个颜色通道值乘以这些因子,然后将结果相加以确定灰度值。
  • @user2357112 如果原始图像显示神秘值,灰度图像如何产生不同的结果,我已经尝试过了,它给了我相同的结果..无论如何我更新了问题
  • 再说一次,你为什么不实际使用b 做任何事情?

标签: python python-3.x image numpy image-processing


【解决方案1】:

更好地阅读带有“I”的图像。 像 imread('imageName.imgFormat',"I") 这将解决问题。它将读取 uint8 格式的图像,我认为这是你想要的。

【讨论】:

  • 但是我通过乘以 255 转换为 uint8,为什么它不起作用?
  • 你认为你已经通过乘法将它转换为 uint8。但你没有。要转换为 uint8,您还必须更改容器的类型。 ``` a = a.astype(np.uint8) ```
  • 容器是什么意思...dtype?
  • ``` a = a.astype(np.uint8) ``
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多