如果我希望根据图像中的像素值填充数组0
或1
,我会写下:
image = "example.jpg"
imageOpen = Image.open(image)
bwImage = imageOpen.convert("1", dither=Image.NONE)
bw_np = numpy.asarray(bwImage)
print(type(bw_np[0, 0]))
结果:
<class 'numpy.bool_'>
由于.convert
双层模式"1"
,数组必须充满1
和0
。 https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.convert
当我尝试更简单的事情时:
bw_np = numpy.asarray([0, 1])
print(type(bw_np[0]))
结果:
<class 'numpy.int32'>
但不是第二个例子,第一个例子是true
和false
。
那么为什么?
答案 0 :(得分:1)
简而言之:在python True
中1
而False
是0
。这应该纠正这种奇怪的行为:
bw_np = numpy.asarray(bwImage, dtype=int)
答案很长:为了更好的内存管理,也许imageOpen.convert("1", dither=Image.NONE)
更喜欢bool而不是int32:
import sys
import numpy
print("Size of numpy.bool_() :", sys.getsizeof(numpy.bool_()))
print("Size of numpy.int32() :", sys.getsizeof(numpy.int32()))
结果:
Size of numpy.bool_() : 13
Size of numpy.int32() : 16