我试图从我的磁盘加载图像,我使用绘画在8x8 png图像中绘制一个数字。
scikit-learn图像看起来像这样:
[[ 0. 0. 5. 13. 9. 1. 0. 0.]
[ 0. 0. 13. 15. 10. 15. 5. 0.]
[ 0. 3. 15. 2. 0. 11. 8. 0.]
[ 0. 4. 12. 0. 0. 8. 8. 0.]
[ 0. 5. 8. 0. 0. 9. 8. 0.]
[ 0. 4. 11. 0. 1. 12. 7. 0.]
[ 0. 2. 14. 5. 10. 12. 0. 0.]
[ 0. 0. 6. 13. 10. 0. 0. 0.]]
其中0为白色,值越大,像素越暗。 当我加载图像时,我得到了这个:
[[[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 0.85882354 0.85882354 0.85882354]
[ 0.14901961 0.14901961 0.14901961]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 0.56862748 0.56862748 0.56862748]
[ 0.22745098 0.22745098 0.22745098]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.9254902 0.9254902 0.9254902 ]
[ 0.13725491 0.13725491 0.13725491]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.53725493 0.53725493 0.53725493]
[ 0.63137257 0.63137257 0.63137257]
[ 0.62352943 0.62352943 0.62352943]
[ 0.97254902 0.97254902 0.97254902]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.36078432 0.36078432 0.36078432]
[ 0.18431373 0.18431373 0.18431373]
[ 0.72941178 0.72941178 0.72941178]
[ 0.07843138 0.07843138 0.07843138]
[ 0.86274511 0.86274511 0.86274511]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.29411766 0.29411766 0.29411766]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 0.42352942 0.42352942 0.42352942]
[ 0.80000001 0.80000001 0.80000001]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.19607843 0.19607843 0.19607843]
[ 0.96470588 0.96470588 0.96470588]
[ 0.90980393 0.90980393 0.90980393]
[ 0.08627451 0.08627451 0.08627451]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]
[[ 1. 1. 1. ]
[ 0.96862745 0.96862745 0.96862745]
[ 0.28627452 0.28627452 0.28627452]
[ 0.35686275 0.35686275 0.35686275]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]
[ 1. 1. 1. ]]]
是否有内置函数以类似于scikit-learn图像的格式转换它?或者我应该编写自己的转换函数吗?
有人可以解释一下imread输出的含义吗?我有8个8x3 2D阵列,我无法弄清楚它是什么。
文档说这是MxN,但我不知道MxN的含义。 http://matplotlib.org/api/image_api.html#matplotlib.image.imread
由于
所以这是我做的代码,感谢ali_m
from numpy import array
def loadImageFromDisk(image_path):
def convertImreadImage(img):
"""
Convert imread images to scikit-learn images
-img : a 2 dimension array (regular or numpy array)
-return : a 2 dimension numpy array where 0 is white and
the higher the value the darker the pixel
"""
res = []
for row in img:
newRow = []
for value in row:
if value == 1.:
newRow.append(0)
else:
newRow.append(math.floor((100-value*100)/5))
res.append(newRow)
return array(res)
#needs to be a absolute path
img = mpimg.imread(image_path)[:, :, 0]
return convertImreadImage(img)
输出8x8 png文件中的6:
[[ 0. 0. 0. 2. 19. 0. 0. 0.]
[ 0. 0. 2. 20. 13. 0. 0. 0.]
[ 0. 1. 20. 16. 0. 0. 0. 0.]
[ 0. 15. 20. 20. 16. 3. 0. 0.]
[ 0. 20. 20. 1. 18. 20. 0. 0.]
[ 0. 20. 9. 0. 1. 20. 0. 0.]
[ 0. 20. 9. 2. 17. 18. 0. 0.]
[ 0. 6. 20. 20. 19. 0. 0. 0.]]
答案 0 :(得分:0)
看起来imread
正在为您提供一个8x8x3阵列,其中最终尺寸对应于红色,绿色和蓝色通道(由于您在Paint中制作的图像为灰度,因此它们都相同)。顺便说一句,对于具有>的阵列通过检查.shape
属性而不是将其内容打印到终端,可以更容易地判断其形状。
要获得8x8阵列,您可以将第一个颜色通道编入索引,例如im[:, :, 0]
其中im
是imread
返回的8x8x3数组。