Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 百安居酒店;W图像到二进制数组_Python_Image_Binary_Converter - Fatal编程技术网

Python 百安居酒店;W图像到二进制数组

Python 百安居酒店;W图像到二进制数组,python,image,binary,converter,Python,Image,Binary,Converter,我想将黑白图像(.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)转换为二进制数组(黑色为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

实际上黑白或者有灰色吗?不仅仅是黑白,图像只是我用油漆画了一个黑色的圆圈,背景是白色的。用
binary=list(map(threshold,img))
替换为
binary=list(map(threshold,pixels))
仍然是一个空列表,我可以用
np\u img=np.array(img)
转换成NumPy数组吗,然后将非零值设置为1
np_img[np_img>0]=1
I打印了np_img[[11…,11][11…,11][11 11…,11],[11…,11][11…,11][11…,11][11]]我需要打印0的1实例。对于0到1也一样。如何执行此操作。