我将图像转换为数组,我想将这些值更改为双极(1,-1),如下所示:
im = Image.open("letter_d.png").convert("L")
ar = np.array(im)
ar[ar == 0] = 1
ar[ar == 255] = -1
我得到这样的东西:
[[255 1 1 1 255 255 255]
[ 1 1 1 1 1 255 255]
[ 1 1 255 255 1 1 255]
[ 1 1 255 255 255 1 1]
[ 1 1 255 255 255 1 1]
[ 1 1 255 255 255 1 1]
[ 1 1 255 255 1 1 1]
[ 1 1 1 1 1 1 255]
[255 255 255 255 255 255 255]]
问题是255个值保持不变,我注意到如果相反,我会尝试将它们更改为正值,如2继续。
答案 0 :(得分:4)
看起来你有一个dtype uint8
数组:
>>> ar = np.array([0, 255], dtype=np.uint8)
>>> ar
array([ 0, 255], dtype=uint8)
>>> ar[1] = -1
>>> ar
array([ 0, 255], dtype=uint8)
>>> ar[1] = -2
>>> ar
array([ 0, 254], dtype=uint8)
如果是这种情况,则您不能有负值(u
中的uint8
表示"无符号")。当您尝试将负值设置为-1
时,它会"回绕"达到最大值(2' s恭维)。
您需要转换为其他(签名)类型。
>>> signed_array = np.array(ar, dtype=int)
>>> signed_array
array([ 0, 254])
>>> signed_array[1] = -1
>>> signed_array
array([ 0, -1])
您选择的类型可能取决于您将在那里打包的值的范围,但int
/ np.int32
对于大多数应用来说应该是非常安全的......
答案 1 :(得分:0)
使用np.int8
将数组转换为ar.astype(np.int8)
会自动将255
转换为-1
s