黑白图像到二进制数组
B&W image to binary array
我想将我的黑白图像 (.png) 转换为二进制数组(黑色为 1 白色为 0)。我写了一些代码,但它不工作。错误提示:map() 的参数 2 必须支持迭代。
这是我的代码:
from PIL import Image
from resizeimage import resizeimage
import sys
def threshold(col):
s = sum(col)
return int(s > 255 * 3 // 2)
img = Image.open("filename.png")
ratio = float((img.size[1]) / (img.size[0]))
img = resizeimage.resize_cover(img, [100, int(ratio * 100)])
pixels = img.getdata()
binary = list(map(threshold, img))
array2d = [binary[i * img.size[0] : (i+1) * img.size[0]] for i in range(img.size[1])]
print('\n'.join(''.join(map(str, line)) for line in array2d))
图片如下:
您需要先将图像转换为灰度,因为 PIL 将其打开为 RGB。然后,反转 0 和 255 值。然后,您可以将非零值转换为 1。这是一种方法:
from PIL import Image
import numpy as np
img = Image.open('bw_circle.png').convert('L')
np_img = np.array(img)
np_img = ~np_img # invert B&W
np_img[np_img > 0] = 1
还有一种使用 PIL 进行反演的替代方法:
from PIL import Image, ImageOps
import numpy as np
img = Image.open('bw_circle.png').convert('L')
img_inverted = ImageOps.invert(img)
np_img = np.array(img_inverted)
np_img[np_img > 0] = 1
我想将我的黑白图像 (.png) 转换为二进制数组(黑色为 1 白色为 0)。我写了一些代码,但它不工作。错误提示:map() 的参数 2 必须支持迭代。 这是我的代码:
from PIL import Image
from resizeimage import resizeimage
import sys
def threshold(col):
s = sum(col)
return int(s > 255 * 3 // 2)
img = Image.open("filename.png")
ratio = float((img.size[1]) / (img.size[0]))
img = resizeimage.resize_cover(img, [100, int(ratio * 100)])
pixels = img.getdata()
binary = list(map(threshold, img))
array2d = [binary[i * img.size[0] : (i+1) * img.size[0]] for i in range(img.size[1])]
print('\n'.join(''.join(map(str, line)) for line in array2d))
图片如下:
您需要先将图像转换为灰度,因为 PIL 将其打开为 RGB。然后,反转 0 和 255 值。然后,您可以将非零值转换为 1。这是一种方法:
from PIL import Image
import numpy as np
img = Image.open('bw_circle.png').convert('L')
np_img = np.array(img)
np_img = ~np_img # invert B&W
np_img[np_img > 0] = 1
还有一种使用 PIL 进行反演的替代方法:
from PIL import Image, ImageOps
import numpy as np
img = Image.open('bw_circle.png').convert('L')
img_inverted = ImageOps.invert(img)
np_img = np.array(img_inverted)
np_img[np_img > 0] = 1